描述
Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Example 1:
Input: [7, 1, 5, 3, 6, 4]
Output: 5
max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0
In this case, no transaction is done, i.e. max profit = 0.
思路
这题是股票系列最简单的一题,其实就是找到两个i, j,满足 i < j 且 使得prices[j] - prices[i] 最大,如果不能赚钱,就不做交易,返回0。
可以说是一个DP的问题,不过比较简单,其实就是简单的迭代,一个变量维护day i之前的最小价格,不断计算当前天卖出股票可以获得最大的收益,在这些收益之中取得最大值即可。
解答
class Solution {
public:
int maxProfit(vector<int>& prices) {
// for weird input
if (prices.size() == 0) {
return 0;
}
// min price to buy
int minPrice = prices[0];
// max profit to get
int maxGain = 0;
for (int i = 1; i < prices.size(); ++i) {
maxGain = max(maxGain, prices[i] - minPrice);
minPrice = min(minPrice, prices[i]);
}
return maxGain;
}
};