给你一个整数数组
nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。
示例1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例2:
输入:nums = [1] 输出:1
示例3:
输入:nums = [5,4,-1,7,8] 输出:23
提示:
1 <= nums.length <= 105-104 <= nums[i] <= 104
代码:
//dp动态规划
public int maxSubArray(int[] nums) {
int len = nums.length;
//用dp数组用来统计前面数之和
int[] dp = new int[len];
//先放一个元素
dp[0] = nums[0];
//循环求和
for(int i = 1; i < len; i++){
//如果是正数,就累加到一起,放到dp对应的位置
if(dp[i-1] > 0){
dp[i] = dp[i-1]+nums[i];
}else{
//负数直接对应赋值就可以了
dp[i] = nums[i];
}
}
int max = dp[0];
//找出dp中最大的那个数
for(int i = 1; i < len; i++){
max = Math.max(dp[i],max);
}
return max;
}版权声明:本文为m0_52066789原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。