https://leetcode.com/problems/best-time-to-buy-and-sell-stock/description/
这道题跟https://blog.csdn.net/tassardge/article/details/83000873类似,还是用一维动态规划中的“局部最优和全局最优法”。
我们迭代处理每天的价格,并且维护三个变量min_price、local和global。
min_price:该变量是到第i天为止的最低价格。
local:表示在第i天卖出的最大收益。很明显,local = max(0, prices[i] - min_price)
global:表示到目前为止的最大收益。global = max(global, local);
以下是C++代码和python代码,时间复杂度为O(n),空间复杂度为O(1)。
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.empty())
return 0;
int global = 0;
int local = 0;
int min_price = prices[0];
for (int i = 1; i<prices.size(); ++i) {
if (min_price > prices[i])
min_price = prices[i];
local = max(0, prices[i] - min_price);
global = max(global, local);
}
return global;
}
};
class Solution:
def maxProfit(self, prices):
if prices == None or len(prices) == 0:
return 0
local = 0
result = 0
min = prices[0]
for item in prices:
if item < min:
min = item
if item >= min:
local = item - min
else:
local = 0
result = max( local, result )
return result