[LeetCode]121. Best Time to Buy and Sell Stock
题目描述
思路
- 对于原数组,生成一个新数组,对应位置的值表示当前位置到结尾的最大值,之后遍历,获取两个数组的差返回最大值
2.另一种思路,遍历一次,关键:curMax += max(0, curMax += [i] - [i - 1]) ,含义是 更新当前最大值
比如对 1, 2, 3 在指向3时,将当前最大值更新为2,对2, 3,1,指向1时,将当前最大值更新为0
之后每次对结果更新最大值
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int maxProfit(vector<int>& prices) {
/* 第一种思路
int len = prices.size();
if (!len)
return 0;
vector<int> afterMax(len, 0);
afterMax[len - 1] = prices[len - 1];
for (int i = len - 2; i >= 0; --i)
afterMax[i] = max(prices[i], afterMax[i + 1]);
int res = 0;
for (int i = 0; i < len; ++i)
res = max(res, afterMax[i] - prices[i]);
return res > 0 ? res : 0;
*/
/*第二种思路*/
int maxCur = 0, maxAll = 0;
for (int i = 1; i < prices.size(); ++i) {
maxCur = max(0, maxCur += prices[i] - prices[i - 1]);
maxAll = max(maxCur, maxAll);
}
return maxAll;
}
};
int main() {
vector<int> prices = { 7,3,4,1,6 };
Solution s;
cout << s.maxProfit(prices) << endl;
system("pause");
return 0;
}
本文介绍了一种解决LeetCode上121题“Best Time to Buy and Sell Stock”的高效算法。通过两种不同的方法来确定股票买入和卖出的最佳时机以获得最大利润。第一种方法涉及生成一个新数组记录每个位置后的最高价格,而第二种方法则是通过单次遍历来更新最大收益。
376

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



