区域和检索-数组不可变(Lc303)——前缀和

给定一个整数数组  nums,处理以下类型的多个查询:

  1. 计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的  ,其中 left <= right

实现 NumArray 类:

  • NumArray(int[] nums) 使用数组 nums 初始化对象
  • int sumRange(int i, int j) 返回数组 nums 中索引 left 和 right 之间的元素的 总和 ,包含 left 和 right 两点(也就是 nums[left] + nums[left + 1] + ... + nums[right] )

示例 1:

输入:
["NumArray", "sumRange", "sumRange", "sumRange"]
[[[-2, 0, 3, -5, 2, -1]], [0, 2], [2, 5], [0, 5]]
输出:
[null, 1, -1, -3]

解释:
NumArray numArray = new NumArray([-2, 0, 3, -5, 2, -1]);
numArray.sumRange(0, 2); // return 1 ((-2) + 0 + 3)
numArray.sumRange(2, 5); // return -1 (3 + (-5) + 2 + (-1)) 
numArray.sumRange(0, 5); // return -3 ((-2) + 0 + 3 + (-5) + 2 + (-1))

提示:

  • 1 <= nums.length <= 104
  • -105 <= nums[i] <= 105
  • 0 <= i <= j < nums.length
  • 最多调用 104 次 sumRange 方法

问题简要描述:实现 NumArray 类

Java

class NumArray {
    private int[] s;
    public NumArray(int[] nums) {
        int n = nums.length;
        s = new int[n + 1];
        for (int i = 0; i < n; i++) {
            s[i + 1] = s[i] + nums[i];
        }
    }

    public int sumRange(int left, int right) {
        return s[right + 1] - s[left];
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * NumArray obj = new NumArray(nums);
 * int param_1 = obj.sumRange(left,right);
 */

 Python3

class NumArray:

    def __init__(self, nums: List[int]):
        self.s = list(accumulate(nums, initial=0))

    def sumRange(self, left: int, right: int) -> int:
        return self.s[right + 1] - self.s[left]


# Your NumArray object will be instantiated and called as such:
# obj = NumArray(nums)
# param_1 = obj.sumRange(left,right)

TypeScript

class NumArray {
    private s;    
    constructor(nums: number[]) {
        let n = nums.length;
        this.s = Array(n + 1).fill(0);
        for (let i = 0; i < n; i++) {
            this.s[i + 1] = this.s[i] + nums[i];
        }
    }

    sumRange(left: number, right: number): number {
        return this.s[right + 1] - this.s[left];        
    }
}

/**
 * Your NumArray object will be instantiated and called as such:
 * var obj = new NumArray(nums)
 * var param_1 = obj.sumRange(left,right)
 */

相关推荐

  1. 区域检索-数组不可(Lc303)——前缀

    2024-03-18 13:38:04       21 阅读
  2. LeetCode 304. 二维区域检索 - 矩阵不可

    2024-03-18 13:38:04       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 13:38:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 13:38:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 13:38:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 13:38:04       20 阅读

热门阅读

  1. 计算机网络的概念

    2024-03-18 13:38:04       21 阅读
  2. 光模块:组件、分类及应用

    2024-03-18 13:38:04       22 阅读
  3. 前端 - 让多个块级元素div在同一行显示的3种方式

    2024-03-18 13:38:04       22 阅读
  4. 前端 - 管理后台自定义侧边导航栏

    2024-03-18 13:38:04       23 阅读
  5. web开发模式

    2024-03-18 13:38:04       24 阅读
  6. 前端系统设计个人总结

    2024-03-18 13:38:04       20 阅读
  7. API安全集成最佳实践:有效应对安全挑战

    2024-03-18 13:38:04       21 阅读
  8. 【 React 】React 中的setState执行机制

    2024-03-18 13:38:04       24 阅读