1. 程式人生 > 其它 >字首和思想

字首和思想

字首和

1、什麼是字首和?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

例題:區域和檢索

 

給定一個整數陣列  nums,處理以下型別的多個查詢:

 

計算索引 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
最多呼叫 10^4 次 sumRange 方法;

解題思路:

 

 

 

 

 

 

Code:

class NumArray {     int[] sums;     public NumArray(int[] nums) {         int n = nums.length;         sums = new int[n + 1];         for (int i = 0; i < n; i++) {             sums[i + 1] = sums[i] + nums[i];         }     }          public int sumRange(int left, int right) {         return sums[right + 1] - sums[left];     } }