题目(leecode T122):
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。
方法:本题乍一看还是有点复杂,因为考虑利润最大化还是有些困难的。但我们需要想清楚一个事情,我们手里只允许有一只股票并且利润的产生是在两天产生的,即后一天和前一天的股票价格相比较才能计算出利润的大小,因此我们可以将利润分解为两天间的股票价格差。比如第一天买入第三天卖出所获得的利润其实就是第二天减去第一天的利润差和第三天减去第二天的利润差。知道了这点,我们就可以先计算出每天的利润,即当天减去前一天的股票价格,因此第一天肯定就是没有利润的了。获得了这个数据后,我们只需要把所有正的利润相加就是我们所以能获得的最大的整体利润。本题中贪心的局部最优在于每天的利润只取正的,负的不要,最后每天都取正的。整体肯定就是最大的利润。
题解:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int result = 0;
for(int i = 1; i < prices.size(); i++){
result += max(prices[i] - prices[i - 1], 0); //只要正的利润
}
return result;
}
};