给你一个整数数组 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
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
贪心算法
遍历数组,创建一个指针,使用preSum记录指针当前位置之前的和,当preSum<0时,丢弃,使用sum记录当前指针处的和,使用maxSum记录最大和。
public int maxSubArray(int[] nums) { if(nums.length == 1){ return nums[0]; } int sum = 0; int preSum = 0; int maxSum = 0; for(int i = 0; i < nums.length; i++){ if(preSum < 0){ preSum = 0; } sum = preSum + nums[i]; preSum = sum; maxSum = maxSum > sum ? maxSum : sum; } return maxSum; }
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
动态规划
若前一个元素>0,则将其加到当前元素上
public int maxSubArray(int[] nums) { int n = nums.length, preSum = 0, maxSum = nums[0]; for(int x : nums){ preSum = Math.max(preSum + x, x); maxSum = maxSum > preSum ? maxSum : preSum; } return maxSum; }
标签:最大,nums,int,sum,数组,preSum,maxSum From: https://www.cnblogs.com/wzxxhlyl/p/17116471.html