- 描述: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.
- 分析:寻找买卖股票的最佳时间,使得利润最大化。
- 思路一:简单动态规划,比较最小值和收益值得到最优解。
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.empty()) return 0;
int profit = 0;
int min_prices = prices[0];
for (int i = 1; i < prices.size(); i++) {
if (prices[i] > prices[i - 1]) {
profit = max(profit, prices[i] - min_prices);
}
min_prices = min(min_prices, prices[i]);
}
return profit;
}
};