第53题 最大子数组和
题目
给你一个整数数组 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
思路
求连续子数组最大的和,遍历数组,一直累加,期间如果小于0就把累加值重新赋值为0
每次累加都需要对比是否是最大和
重置为 0 是因为 负的累加和不会对后续产生增益,只会减少后续可能的最大和
代码示例
import java.util.*;public class lc53 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String str = scan.nextLine();String[] split = str.substring(1, str.length() - 1).split(",");int[] arr = new int[split.length];for (int i = 0; i < split.length; i++) {arr[i] = Integer.parseInt(split[i]);}lc53 lc = new lc53();int res = lc.maxSubArray(arr);System.out.println(res);}public int maxSubArray(int[] nums) {int max = nums[0], sum = 0;for (int i = 0; i < nums.length; i++) {sum += nums[i];max = Math.max(max, sum);if (sum < 0) {sum = 0;}}return max;}
}
