题目
输入一个整型数组,数组里有正数也有负数。
数组中的一个或连续多个整数组成一个子数组。
求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为6。
提示:
1 <= arr.length <= 10^5
-100 <= arr[i] <= 100
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof
写法一
记录到当前位置的数组的和,如果和小于0,那么一个负数加上任何一个数都会比直接用当前数字作为和要小,所以只需要一个数字作为标记位记录当前子数组的和就可以了。
解题思路引用自作者:huyangc
–执行时间:24 ms --消耗内存:6 MB
func maxSubArray(nums []int) int {
ret:=nums[0]
max:=nums[0]
i:=1
for i<len(nums){
if max<0{
max=nums[i]
}else{
max+=nums[i]
}
if ret<max{
ret=max
}
i++
}
return ret
}
写法二
遇到负数丢弃,将数组每个位置的值更改为当前位置上的最大和。
解题思路引用自作者:Pumpkin🎃
–执行时间:20 ms --消耗内存:6 MB
func maxSubArray(nums []int) int {
max:=nums[0]
i:=1
for i<len(nums){
if nums[i-1]>0{
nums[i]+=nums[i-1]
}
if max<nums[i]{
max=nums[i]
}
i++
}
return max
}