public NumArray(int[] nums) { mData = nums; } public int sumRange(int i, int j) { int sum = 0; for (int k = i; k <= j; k++){ sum += mData[k]; } return sum; } }
方法二:把求和转化为作差
思路是先创造出来一个数组,该数组里第i个值表示i之前的原始数组nums之和,把问题转为新数组作差。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
class NumArray { private int[] mData;
public NumArray(int[] nums) { mData = new int[nums.length + 1]; for (int i = 0; i < nums.length; i++){ mData[i+1] = mData[i] + nums[i]; } } public int sumRange(int i, int j) { return mData[j+1] - mData[i]; } }