演算法題 303 區域和檢索 陣列不可變

2021-10-20 17:44:49 字數 1329 閱讀 2830

題幹:

給定乙個整數陣列 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]))

示例:

輸入:[「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))

0 <= nums.length <= 104

-105 <= nums[i] <= 105

0 <= i <= j < nums.length

最多呼叫 104 次 sumrange 方法

核心思想:

注意本體的提示,本體的呼叫次數非常多,而且陣列的區間非常大,每次計算重新累加都會十分浪費時間,所以考慮空間換時間,儲存計算結果。區間的值 = sum[right] - sum[left - 1]

示例**:

class

numarray

}public

intsumrange

(int i,

int j)

return sums[j +1]

- sums[i];}

}/**

* your numarray object will be instantiated and called as such:

* numarray obj = new numarray(nums);

* int param_1 = obj.sumrange(i,j);

*/

303 區域和檢索 陣列不可變

給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。示例 給定 nums 2,0,3,5,2,1 求和函式為 sumrange sumrange 0,2 1 sumrange 2,5 1 sumrange 0,5 3 說明 你可以假設陣列不可變。會多...

303 區域和檢索 陣列不可變

給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。示例 給定 nums 2,0,3,5,2,1 求和函式為 sumrange sumrange 0,2 1 sumrange 2,5 1 sumrange 0,5 3說明 你可以假設陣列不可變。會多次...

303 區域和檢索 陣列不可變

給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i j 兩點。實現 numarray 類 numarray int nums 使用陣列 nums 初始化物件 int sumrange int i,int j 返回陣列 nums 從索引 i 到 j i j 範圍...