Kadane算法

关于Kadane算法,可以参考wiki

大致的思想是: 第i个元素之前(包括i)的最大子数组之和为B(i),那么B(i+1)=max(A(i+1), A(i+1)+B(i))。因为如果A(i+1)+B(i)A(i+1)小的话,那说明B(i)是负的,所以可以抛弃掉,从A(i+1)开始计算即可。

使用go语言表示上面的思想:

func maxSubArray(nums []int) int {
    ret := nums[0]
	sum := nums[0]
	for i := 1; i < len(nums); i++ {
	    sum = max(nums[i], nums[i] + sum)
	    ret = max(ret, sum)
	}
	return ret
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
复制代码

相关题目

1. Maximum Subarray

上面的代码就是这道题的答案

2. Best Time to Buy and Sell Stock

func maxProfit(prices []int) int {
	maxCur := 0
	maxSoFar := 0
	for i := 1; i < len(prices); i++ {
		maxCur += prices[i] - prices[i-1]
	   	maxCur = max(0, maxCur)
		maxSoFar = max(maxCur, maxSoFar)
	}
	return maxSoFar
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值