Leetcode193: Range Sum Query - Immutable

来源:互联网 发布:平板电脑监控软件 编辑:程序博客网 时间:2024/05/22 17:12

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) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3

Note:

  1. You may assume that the array does not change.
  2. There are many calls to sumRange function.
原始版本:

class NumArray {private:    int *sum;    vector<int> array;public:    NumArray(vector<int> &nums) {        int n = nums.size();        if(n == 0)            return;        array = nums;        sum = new int[n];        sum[0] = nums[0];        for(int i = 1; i < n; i++)        {            sum[i] = sum[i-1] + nums[i];        }    }    int sumRange(int i, int j) {        return sum[j]-sum[i]+array[i];    }};// Your NumArray object will be instantiated and called as such:// NumArray numArray(nums);// numArray.sumRange(0, 1);// numArray.sumRange(1, 2);
优化后:

class NumArray {private:    vector<int> array = {0};public:    NumArray(vector<int> &nums) {        int n = nums.size();        if(n == 0)            return;        int sum = 0;        for(int i = 0; i < n; i++)        {            sum += nums[i];            array.push_back(sum);        }    }    int sumRange(int i, int j) {        return array[j+1]-array[i];    }};// Your NumArray object will be instantiated and called as such:// NumArray numArray(nums);// numArray.sumRange(0, 1);// numArray.sumRange(1, 2);



0 0
原创粉丝点击