/* * 303. Range Sum Query - Immutable * 2016-7-3 by Mingyang * 这个题目很简单的一开始看来,直接累加就好,但是这里说的是sumRange会被调用很多次 * 因此需要把结果先存起来,调用时就可以直接返回了。最开始考虑的是用dp[i][j]来直接存储i到j之间元素的和, * 但是内存超出限制。于是考虑用dp[i]来存储0到i之间元素的和,0到j的和减去0到i-1的和即为所求。 */ class NumArray { private int[] dp; public NumArray(int[] nums) { dp = new int[nums.length]; int sum = 0; for (int i = 0; i < nums.length; i++) { sum += nums[i]; dp[i] = sum; } } public int sumRange(int i, int j) { return i == 0 ? dp[j] : dp[j] - dp[i - 1]; } }