题目:53. 最大子序和
思路:动态规划。
dp[i]
表示,数组以索引i
结尾的最大字序和,很显然:
dp[i] = Math.max(nums[i], nums[i] + dp[i - 1])
由于dp[i]
只和前一个值dp[i -1]
有关,因此可以对空间进行优化。
代码:优化
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
int dp = nums[0];
int max = nums[0];
for (int i = 1; i < n; i++) {
dp = Math.max(nums[i], nums[i] + dp);
max = Math.max(max, dp);
}
return max;
}
}
代码:未优化
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] dp = new int[n];
dp[0] = nums[0];
int max = nums[0];
for (int i = 1; i < n; i++) {
dp[i] = Math.max(nums[i], nums[i] + dp[i - 1]);
max = Math.max(max, dp[i]);
}
return max;
}
}