问题:
给定一个列表,第i个元素代表股票第i天的价值,只允许买入卖出一次,求最大收益
思路:动态规划
开始没想清楚,觉着遍历一次找出最大与最小股价求差就是,后来发现脑子绣住了,买入要在买出之前。
输入为列表p1p2...pm
m[i]表示前i天的最小股价,m[i] = min(p[i], m[i-1]) i >= 1 <-- O(n)时间开销
第i天卖出的最大收益是pi - m[i-1] <-- 遍历一次O(n)求出最大值
代码:Python
class Solution: # @param prices, a list of integer # @return an integer def maxProfit(self, prices): n = len(prices) if n < 2: return 0 else: # m[i] means minimal value of stock before day i m = [0 for i in range(n)] m[0] = prices[0] for i in range(1,n): m[i] = min(prices[i], m[i-1]) ret = 0 for i in range(1, n): ret = max(ret, prices[i] - m[i-1]) return ret
时间: 2024-10-10 17:52:48