leetcode 123. best time to bu and sell stock 3

1.方法不是很完美,速度也不是很快,但是比较容易理解
2.利用前面的题目答题
3.算法:
先将序列中相邻重复数字去掉,节省时间
找出序列中局部高位,这将是可能的卖出时间
我们对局部卖出点进行循环,局部最高左边是一次买卖,右边是一次买卖,因为买卖之多两次,我们尽量都是两次。
局部左边最高那就得利用前面做过的同类型easy题目,可以直接利用起来,右边局部也是同样。
结论:此方法直接利用前面题目的做法,时间复杂度会比较高,但是容易理解和编码。

class Solution:
	    def maxProfit(self, prices: List[int]) -> int:
	        # 局部最高-循环
	        i = 0
	        while i < len(prices):
	            if i >= 1:
	                if prices[i] == prices[i-1]:
	                    del prices[i]
	                    continue
	            i += 1
	        k = 0
	        def maxProfit(prices: list) -> int:
	            Maxp = 0
	            if len(prices)<=1:return 0
	            Minp = prices[0]
	            for i in range(1,len(prices)):
	                Minp = min(Minp, prices[i-1])
	                Maxp = max(Maxp, prices[i]-Minp)
	            return Maxp
	
	        local = [i for i in range(1, len(prices)-1) if prices[i+1] < prices[i] and prices[i] >  prices[i-1]]
	        local.append(len(prices)-1)
	        twice_max = 0
	        for i in local:
	            twice_max = max(twice_max, maxProfit(prices[i+1:]) + maxProfit(prices[0:i+1]))
	
	        return twice_max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值