设计题——区域和检索

关键词:前缀和

关键思路:要新开辟一个空间,用来保存前缀和(就是累加)。

 

代码:

typedef struct {
    int* sums;
} NumArray;

NumArray* numArrayCreate(int* nums, int numsSize) {
    NumArray* ret = (NumArray*)malloc(sizeof(NumArray));
    ret->sums = (int*)malloc(sizeof(int) * (numsSize + 1));
    ret->sums[0] = 0;
    for (int i = 0; i < numsSize; i++) {
        ret->sums[i + 1] = ret->sums[i] + nums[i];
    }
    return ret;
}

int numArraySumRange(NumArray* obj, int left, int right) {
    return obj->sums[right + 1] - obj->sums[left];
}

void numArrayFree(NumArray* obj) {
    free(obj->sums);
}
posted @ 2021-11-20 17:53  bwinLv  阅读(24)  评论(0编辑  收藏  举报