最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
一、解题思路
看到子数组子串想想每个位置结尾是答案是什么
如果子数组必须以0结尾,它往左扩到什么程度,能让累加和最大
如果子数组必须以1位置结尾,它往左扩到什么程度,能让累加和最大
假设我每一个i位置的答案都能求出来,这个答案是什么,就是子数组必须以i位置的数结尾的情况下,它往左边能够扩多大能够让累加和最大,如果这个我都能求出来,那么答案一定在所有的,比如0位置结尾的答案1位置结尾的答案.一定在所有位置值结尾答案之中求个max就可以了。
可能性划分必须以i位置结尾答案可能来自什么?
1)完全不向左扩,只有自己
2)要向左扩, i-1结尾的时候扩出来的最好,决定了当前能扩出来的最好
二、代码
class Solution {
public int maxSubArray(int[] nums) {
int max=nums[0];
int pre=nums[0];
for(int i=1;i<nums.length;i++){
int cur=nums[i]>nums[i]+pre?nums[i]:nums[i]+pre;
max=Math.max(cur,max);
pre=cur;
}
return max;
}
}