题目的链接在这里:https://leetcode-cn.com/problems/maximum-subarray/
题目大意
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。一、示意图
二、解题思路
动态规划
动态规划
代码如下:
class Solution {
public int maxSubArray(int[] nums) {
//最大子序和 用动态规划算 给一个数组 找有最大的连续子数组
//那就把dp[i]设置成 以i为最后一个节点的最大之后 那就必须是选到i了 然后并且是 找到其中的最大值
int[] dp=new int[nums.length+3];
int result=nums[0];
//先是起始状态
dp[0]=nums[0];
//然后是 转移方程
for(int i=1;i<nums.length;i++){
//dp[i]的话 就是必须是以他为底 所以只可能是 如果前面是负数 那就是他自己 如果 i-1是整数 那就加上他
if(dp[i-1]<0){
dp[i]=nums[i];
}
else{
dp[i]=dp[i-1]+nums[i];
}
result=Math.max(result,dp[i]);
}
return result;
}
}