题解 | #买卖股票的最好时机(二)#

买卖股票的最好时机(二)

https://www.nowcoder.com/practice/9e5e3c2603064829b0a0bbfca10594e9

//吸取教训,任何题目不要固定思维,常规解法也就是贪婪解法可以很容易解
//动态规划解法几乎都是将问题分解成当天是否持有该股票
//并且也没说该怎么引导往这个方向上想
//我觉得冷不丁要想到对我来说还是有难度
//然后我就写一下我的思考过程作为笔记
//首先设定主问题就是以第N天结尾序列的最大收益f(N)(这个是基础)
//最后一天可以确定是不会执行买入操作的。
//所以对最后一天只能选择不动或者卖出操作所以f(N) = max(g(N)(不操作的最大收益),t(N)(卖出操作的最大收益))
//当选择不操作,那么最大的就是以N-1天结尾的最大收益,g(N) = f(N-1)
//当选择卖出操作,那上一次操作一定是买入,有可能在1...N-1任意一天买入,我假设n天买入最大收益为b(n)
//b(n) = f(n-1)-prices[n],第n天买入最大收益等于n-1天最大收益减当天价格
//我要求t(N)是卖出最大收益,则选择b(n)买入收益最大那一天,所以t(N) = max(b(1),b(2)...b(N-1))+prices[N]
//看似他因为b(n)可以由f(n-1)表示,意味着t(N)也可以用f(N-1)表示了,自然可以用动态规划了
//提一点,看似他t(N)每次都要求一个买入的最大值,每次都要判断N-1次
//但是max(b(1),b(2)...b(N-1)) = max(max(b(1),...b(N-2)),b(N-1)),也可以用动态规划,所以复杂度还是n
//越说越复杂···就当是我这个菜鸟最后的挣扎吧,就像看看自己想能不能想出来
func maxProfit(prices []int) int {     // write code here     max := 0     maxbuy := 0 - prices[0]     for i := 1; i < len(prices); i++ {         if maxbuy+prices[i] > max {             max = maxbuy + prices[i]         }         if max-prices[i] > maxbuy {             maxbuy = max - prices[i]         }     }     return max
}
	


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
2842次浏览 41人参与
# HR最不可信的一句话是__ #
970次浏览 31人参与
# MiniMax求职进展汇总 #
24792次浏览 321人参与
# 春招至今,你的战绩如何? #
14263次浏览 133人参与
# AI面会问哪些问题? #
859次浏览 21人参与
# 你的实习产出是真实的还是包装的? #
2541次浏览 48人参与
# 米连集团26产品管培生项目 #
6979次浏览 224人参与
# 沪漂/北漂你觉得哪个更苦? #
1035次浏览 29人参与
# 你做过最难的笔试是哪家公司 #
1053次浏览 18人参与
# AI时代,哪个岗位还有“活路” #
2607次浏览 49人参与
# XX请雇我工作 #
51137次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7931次浏览 43人参与
# 简历第一个项目做什么 #
32025次浏览 357人参与
# 简历中的项目经历要怎么写? #
310831次浏览 4256人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152767次浏览 888人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187513次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64461次浏览 860人参与
# 如果重来一次你还会读研吗 #
229956次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178133次浏览 889人参与
# 你怎么看待AI面试 #
180592次浏览 1291人参与
# 正在春招的你,也参与了去年秋招吗? #
364089次浏览 2640人参与
# 腾讯音乐求职进展汇总 #
160802次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务