简单粗暴的第一种解法:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int m = prices.size();
int maxprofit = 0;
for (int k = 0; k < m; k++)
{
for (int i = k; i < m; i++){
if (prices[i] - prices[k] > maxprofit)
maxprofit = prices[i] - prices[k];
}
}
return maxprofit;
}
};
第二种解法:
从最后一个元素开始遍历(vector不能为空),维持一个最大价格和一个最大收益
class Solution {
public:
int maxProfit(vector<int>& prices) {
int m = prices.size();
if (m == 0) return 0;
int maxprofit = 0;
int maxprice = prices.back();
for (int k = m-1; k >= 0; k--)
{
if (prices[k] > maxprice) maxprice = prices[k];
else if(maxprice - prices[k] > maxprofit) maxprofit = maxprice - prices[k];
}
return maxprofit;
}
};
本文介绍两种求解股票买卖最佳时机以获得最大利润的算法。第一种为简单粗暴法,通过双重循环遍历所有可能的买入卖出组合,找出最大利润。第二种算法则更高效,从最后一个元素开始遍历,维护一个最大价格和最大收益,避免了不必要的重复计算。
158

被折叠的 条评论
为什么被折叠?



