Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
Example:
Given nums = [-2, 0, 3, -5, 2, -1]sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3
Note:
You may assume that the array does not change.
There are many calls to sumRange function.
如果不考慮Note的話,這個題沒什么可說的,可是如果這個方法會被調用很多次,且數組是不變的,那我們的想法就是,在初始化的時候來做一些事情,讓每次調用都可以直接取到結果。
首先想到的是使用HashTable,但是這樣要保存幾乎n方個數據。
我們新建一個數組sum,讓每第i個值是num數組中前i-1個值的和,比如sum[0]=0,sum[1]是前一個數的值,sum[2]是前兩個數的值。這樣我們在請求第i到第j個元素的和的時候,就可以用前j個元素的和減去前i-1個元素的和,也就是sum[j+1]-sum[i]。
比如:
array=[4,3,1,5,6];
sum =[0,4,7,8,13,19];
i=2;j=4;1+5+6 = 12
sum[4+1]-sum[2]=19-7=12;
/**
* @constructor
* @param {number[]} nums
*/
var NumArray = function(nums) {
this.sum = [0];
var num = nums.length;
for (var i = 0; i < num;i++) {
this.sum[i+1]=this.sum[i]+nums[i];
}
};
/**
* @param {number} i
* @param {number} j
* @return {number}
*/
NumArray.prototype.sumRange = function(i, j) {
return this.sum[j+1]-this.sum[i];
};