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.
思路:
1.设置两个变量m和M,分别表示当前最小价格索引和最大价格索引,遍历数组,每次遇到更小的价格,就让m=i,更新最小价格同时令M=i,防止最大价格出现在最小价格左边的情况,,如果遇到更高的价格就更新M,并让利润取原利润和当前利润的较大值。
参考代码:
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit=0,M=0,m=0,n=prices.size();
for(int i=0;i<n;i++){
if(prices[i]<prices[m]) {m=i;M=i;}
if(prices[i]>prices[M]) {
M=i;
profit=max(profit,prices[M]-prices[m]);
}
}
return profit;
}
};
273

被折叠的 条评论
为什么被折叠?



