最大子数组和力扣--53

时间:2025-02-28 21:25:11

目录

题目

思路

代码


题目

给你一个整数数组 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

思路

记录和,遍历,一旦和变成负数,他会使得后面要加的那个数字变小,所以思路是一旦和变成负数,就舍弃他们,从下一个数字开始计算。不是遇到负数就舍弃他!!!!

局部最优的情况下,并记录最大的“连续和”,可以推出全局最优

实时更新最后的结果,哪个大保留哪个

代码

class Solution {
    public int maxSubArray(int[] nums) {
        int sum = Integer.MIN_VALUE;
        int count=0;
        for(int i=0;i<nums.length;i++){
            count+=nums[i];
            sum = Math.max(sum, count);//这行和下一行不可以交换顺序,因为下一行改变了count的取值,从而会影响到这一行
            if(count<0){count=0;}
             
        }
            return sum;
    }

}