一、题目:
给定一个整数数组nums,找出具有最大和的连续子数组,返回其最大和。

二、思路:
1、动态规划:dp记录当前位置的最大子数组的和,状态转移方程为dp = Math.max(num,dp+num);
当前位置的最大子数组的和,要么是当前位置本身开启的起点(如果之前和小于0),要么是之前的和继续加和(如果之前和大于0)。
2、遍历数组,记录当前位置的最大子数组的和,再更新结果的最大值。
三、代码:
class Solution {
public int maxSubArray(int[] nums) {
int res = Integer.MIN_VALUE;
int dp = 0;
for(int num : nums){
dp = Math.max(num,dp+num);
res = Math.max(dp,res);
}
return res;
}
}
1万+

被折叠的 条评论
为什么被折叠?



