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