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:
依次往后扫描,在前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;
}
};