[LeetCode]303. Range Sum Query - Immutable ★

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xingyu97/article/details/100180296

题目描述

Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.
题目大意:给定一个数字数组,计算其中下标从 i 到 j 的元素的和,i,j 均合法且为闭区间。

样例

Example:

Given nums = [-2, 0, 3, -5, 2, -1]
sumRange(0, 2) -> 1
sumRange(2, 5) -> -1
sumRange(0, 5) -> -3

python解法

class NumArray:

    def __init__(self, nums: List[int]):
        self.nums = []
        for i,n in enumerate(nums):
            if i != 0:
                self.nums.append(self.nums[i-1]+n)
            else:
                self.nums.append(n)

    def sumRange(self, i: int, j: int) -> int:
        return self.nums[j] - (i and self.nums[i-1])

Runtime: 96 ms, faster than 54.19% of Python3 online submissions for Range Sum Query - Immutable.
Memory Usage: 17.3 MB, less than 10.00% of Python3 online submissions for Range Sum Query - Immutable.
题后反思:

  1. 这种题目最简单的思路就是直接将nums赋值给一个实例变量,然后给出范围是直接相加,但是这种方式无形中导致重复计算了很多次.
  2. 所以为了改进算法,可以在初始化的时候将列表的其实位置到当前位置的和计算好,在计算某个范围的和时直接做一次减法就可以了。
  3. 因为求的是闭区间的元素的和,所以在相减的时候下标为i的元素需要判断是否越界。

C语言解法

typedef struct {
    int *data;
} NumArray;

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

int numArraySumRange(NumArray* obj, int i, int j) {
  return obj->data[j+1] - obj->data[i];
}

void numArrayFree(NumArray* obj) {
    free(obj->data);
    free(obj);
}

Runtime: 24 ms, faster than 72.22% of C online submissions for Range Sum Query - Immutable.
Memory Usage: 12.5 MB, less than 33.33% of C online submissions for Range Sum Query - Immutable.
题后反思:

  1. C语言解法中多申请了一个空间存放了0,从而保证了j+1不会越界(i,j都合法的前提下)

文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步

猜你喜欢

转载自blog.csdn.net/xingyu97/article/details/100180296
今日推荐