121. Best Time to Buy and Sell Stock
Description:
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.
Solution:
考虑的是股票买进卖出,利润最大的问题。
在例1中,最大差价不是7-1,因为在最开始的7必须为一个买进!!!
解决思路:依次往后扫描,在前n个数据中求出最小数据,用第i个数据减去前i个数据的最小值(0<=i<=1),所有最小值中的最大数,即为最大差价。
代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
if (prices.size() == 0){
return 0;
}
int max = 0, min = prices[0];
int profit = 0;
for (int i = 1; i < prices.size(); i++) {
if (prices[i] < min){
min = prices[i];
}else{
if (prices[i] - min > profit){
profit = prices[i] - min;
}
}
}
return profit;
}
};