
总结
这个题目有点懵逼,第一次见这种题目
这种题目的意思就是,我们通过这个函数名来调用函数,调用NumArrray就创建对象,调用sumRange就是返回这个区域的检索和。
相比于自己调用函数,leecode的这个调用函数是传递函数名,和这个参数值来调用的,利用了Java的反射。先获取函数对象,然后传递参数调用
我的思路
这个题目难度不高,主要是调用方式比较有趣
class NumArray {
//NumArray是创建这个数组对象,这个sumRange是返回这个元素之和
private final int[] s;
public NumArray(int[] nums) {
s = new int[nums.length];
for(int i =0;i<nums.length;i++){
s[i]=nums[i];
}
}
public int sumRange(int left, int right) {
int res =0;
for(; left<=right;left++){
res+=s[left];
}
return res;
}
}
灵神思路
我的思路中当多次调用这个sumRange的时候,时间复杂度比较高
灵神采取的思路是,计算出数组的前缀和。前缀和-另一个前缀和= 这两个之间元素的和
class NumArray {
private final int[] s;
public NumArray(int[] nums) {
s = new int[nums.length+1];
int sum = 0;
s[0]=0;
for(int i= 0;i<nums.length;i++){
sum+=nums[i];
s[i+1]=sum;
}
}
public int sumRange(int left, int right) {
return s[right+1]-s[left];
}
}
588

被折叠的 条评论
为什么被折叠?



