您的位置:首页 > 产品设计 > UI/UE

107.Range Sum Query - Immutable

2016-04-10 09:59 369 查看
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) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3


Note:

You may assume that the array does not change.
There are many calls to sumRange function.

Subscribe to see which companies asked this question.
分析:题目意思是给定一个数组,然后多次给定一个下标返回,求返回这个范围的元素和。
因为题目中说到会多次调用这个方法,所以在初始化NumArray这个对象的时候就把这个数组sums给初始化好,sums的第i个元素表示nums元素中的[0,i]的和。
/**@date 20160410*/
public class NumArray {
/*定义一个数组对应下标为i的元素存储nums中下标为0到i项的和。*/
int[] sums;
int len;//存储数组的长度
public NumArray(int[] nums) {
len = nums.length;/*!!!!!!!!!!!!!!!!!!!注意之前一直不通过的原因是在这个len 前面又加了int,导致整个对象的成员变量len的值为0*/
sums = new int[len];
/*初始化sums的值*/
if(len<=0){
sums = new int[0];
}else{
sums[0] = nums[0];
for(int i=1;i<len;i++){
sums[i]=sums[i-1]+nums[i];
}
}

}
/*求数组nums中下标i到下标j的和,直接计算sums[j]-sums[i-1](前提是i>=1,如果i=0,则直接返回sums[j])*/
public int sumRange(int i, int j) {
/*保证j和i不能越界*/
if(j>=len){
j=len-1;
}
if(i<=0){
return sums[j];
}else{
return sums[j]-sums[i-1];
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: