LeetCode上的題目 "303. 區域和檢索 - 數組不可變",是一個相對簡單的問題。
問題描述:
給定一個整數數組 nums,求出該數組從索引 i 到 j(i ≤ j)範圍內元素的總和,包含 i, j 兩點。
實現 NumArray 類:
NumArray(int[] nums) 用整數數組 nums 初始化對象
int sumRange(int i, int j) 返回數組 nums 從索引 i 到 j(i ≤ j)範圍內元素的總和,包含 i, j 兩點(也就是 sum(nums[i], nums[i + 1], ... , nums[j]))
示例:
輸入:
nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3
思路:利用前綴和或者dp 記錄,從頭開始每一步的累計和,然後在需要的時候直接取值
//leetcode submit region begin(Prohibit modification and deletion)
class NumArray {
private int[] prefixNum;
public NumArray(int[] nums) {
prefixNum = new int[nums.length];
prefixNum[0]=nums[0];
for (int i = 1; i < nums.length; i++) {
prefixNum[i]= prefixNum[i-1]+nums[i];
}
}
public int sumRange(int left, int right) {
if(left == 0){
return prefixNum[right];
}
return prefixNum[right]-prefixNum[left-1];
}
}
/**
* Your NumArray object will be instantiated and called as such:
* NumArray obj = new NumArray(nums);
* int param_1 = obj.sumRange(left,right);
*/
//leetcode submit region end(Prohibit modification and deletion)