题目:原题链接(中等)
标签:贪心算法、动态规划
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( N ) O(N) O(N) | O ( N ) O(N) O(N) | 44ms (58.76%) |
Ans 2 (Python) | |||
Ans 3 (Python) |
解法一:
class Solution:
def maxProfit(self, prices: List[int]) -> int:
if len(prices) <= 1:
return 0
# 计算所有差值
differ1 = collections.deque([prices[i + 1] - prices[i] for i in range(len(prices) - 1)])
# 去掉首尾的跌幅
while differ1 and differ1[0] < 0:
differ1.popleft()
while differ1 and differ1[-1] < 0:
differ1.pop()
print(differ1)
# 去掉所有连续跌幅(超过2个连续跌幅中间卖掉冷冻期不影响)
differ2 = []
last = False # 之前是否是连续跌幅
for differ in differ1:
if differ >= 0:
differ2.append(differ)
last = False
else:
if last:
continue
elif differ2 and differ2[-1] < 0:
differ2.pop()
last = True
else:
differ2.append(differ)
print(differ2)
if not differ2:
return 0
early1, early2 = 0, 0 # 更早的最大值
last = 0 # 上一个数的最大值
for i in range(len(differ2)):
early2, early1, last = max(early2, early1), last, last + differ2[i]
last = max(last, early2)
return last