标签:style call i++ btn des 就是 总结 code 重复
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) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3
Note:
1 class NumArray { 2 int[] dp; 3 public NumArray(int[] nums) { 4 if ( nums == null || nums.length == 0 ) return ; 5 dp = new int[nums.length]; 6 dp[0]=nums[0]; 7 for ( int i = 1 ; i < nums.length ; i ++ ){ 8 dp[i] = dp[i-1]+nums[i]; 9 } 10 } 11 12 public int sumRange(int i, int j) { 13 return i==0?dp[j]:dp[j]-dp[i-1]; 14 } 15 }
这里要注意第4行。运行时间125ms,击败96.34%。
感觉还是有优化的空间的,因为这种方法考虑太多的特殊情况,能不能想办法将特殊情况也总结进去。看了一下solution,神奇的发现用一个长度为nums.length+1的数组就可以避免两种特殊情况的讨论了。代码如下:
1 private int[] sum; 2 3 public NumArray(int[] nums) { 4 sum = new int[nums.length + 1]; 5 for (int i = 0; i < nums.length; i++) { 6 sum[i + 1] = sum[i] + nums[i]; 7 } 8 } 9 10 public int sumRange(int i, int j) { 11 return sum[j + 1] - sum[i]; 12 }
设计很巧妙,可以学习。
[leetcode] Range Sum Query - Immutable
标签:style call i++ btn des 就是 总结 code 重复
原文地址:https://www.cnblogs.com/boris1221/p/9314215.html