leetcode53:最大子序和
-
题目:
-
给你一个整数数组
nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。
-
-
思路:贪心算法+代码注释
-
代码如下:
class Solution {
public int maxSubArray(int[] nums) {
int res = Integer.MIN_VALUE;
int count = 0;
if ( nums.length <= 1) {
return nums[0];
}
for ( int i = 0; i < nums.length; i++ ) {
count += nums[i];
res = Math.max( res, count );
if ( count <= 0 ) {
count = 0;
}
}
return res;
}
}
- 思路二:动态规划(不推荐)
- 代码如下:
class Solution {
public int maxSubArray(int[] nums) {
//dp[i] 前i个数的最大子数组和
int[] dp = new int[nums.length];
dp[0] = nums[0];
int res = nums[0];
for ( int i = 1; i < nums.length; i++ ) {
dp[i] = Math.max( dp[i - 1] + nums[i], nums[i] );
res = Math.max( dp[i], res );
}
return res;
}
}