LeetCode 303. Range Sum Query - Immutable
求数组nums[i,j]的和
思路:另开一sum数组,sum[i]为nums[0,i]的和,所以nums[i,j] = sum[j] - sum[i-1]
1 class NumArray { 2 public: 3 vector<int> sum; 4 NumArray(vector<int> &nums) { 5 sum.resize(nums.size(), 0); 6 sum[0] = nums[0]; 7 int len = nums.size(); 8 for(int i=1; i<len; ++i) 9 sum[i] = sum[i-1] + nums[i]; 10 } 11 12 int sumRange(int i, int j) { 13 if(sum.size()==0) return 0; 14 if(i == 0) return sum[j]; 15 return sum[j] - sum[i-1]; 16 } 17 };
但是输入为[]时出现Runtime Error,将sum数组的长度+1,AC。
1 class NumArray { 2 vector<int> sums; 3 public: 4 NumArray(vector<int> &nums) { 5 sums.resize(nums.size()+1, 0); 6 for(int i=1; i<=nums.size(); i++){ 7 sums[i]=sums[i-1]+nums[i-1]; 8 } 9 } 10 11 int sumRange(int i, int j) { 12 return sums[j+1]-sums[i]; 13 } 14 };