原题:
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
代码如下:
typedef struct {
int* testNum;
} NumArray;
NumArray* numArrayCreate(int* nums, int numsSize) {
NumArray* obj;
obj=(NumArray*)malloc(sizeof(NumArray));
obj->testNum=(int*)malloc(sizeof(int)*numsSize);
int sum=0;
for(int n=0;n<numsSize;n++)
{
sum+=*(nums+n);
*(obj->testNum+n)=sum;
}
return obj;
}
int numArraySumRange(NumArray* obj, int i, int j) {
if(i==0)
return *(obj->testNum+j);
return *(obj->testNum+j)-*(obj->testNum+i-1);
}
void numArrayFree(NumArray* obj) {
free(obj->testNum);
free(obj);
}
/**
* Your NumArray struct will be instantiated and called as such:
* struct NumArray* obj = numArrayCreate(nums, numsSize);
* int param_1 = numArraySumRange(obj, i, j);
* numArrayFree(obj);
*/
这个不是很难,但是用一般的循环,会超时。
所以借鉴了别人的想法,在第一次循环的时候,存储序列的和。
所以,简化循环次数。
还是针对特定需求。还是比较有用的。 查询次数。