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 (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Note that you cannot sell a stock before you buy one.
Example 1:
Input: [7,1,5,3,6,4] Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 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 Explanation: In this case, no transaction is done, i.e. max profit = 0.
class Solution {
public:
int maxProfit(vector<int>& prices) {
int dif=0;
int lowpoint=0;
for(int i=1;i<prices.size();i++){
int val=prices[i]-prices[lowpoint];
if(val>dif)
dif=val;
else if(val<0)
lowpoint=i;
}
return dif;
}
};
这道题表面上看似乎复杂度非常高,要去判断n*n种情况?其实不然,仔细分析 一下,可以得出这样一个简单的思路:只需考虑每一次新遍历到的价格减去最低价,它是否高于之前的价格差(就是利润),如果高于,那么就更新利润。如果新的价格减最低价小于0,那么就将新价格作为最低价即可。