本题源自leetcode 121-123
-------------------------------------------------------
1 只可以交易一次,求最大的利润
思路1 用俩个变零来标记最便宜的价格,和最大的利润。
代码:
int maxProfit(vector<int>& prices) {
int maxPro=0;
int minPrice=INT_MAX;
for(int i=0;i<prices.size();i++){
minPrice=min(minPrice,prices[i]);
maxPro=max(maxPro,prices[i]-minPrice);
}
return maxPro;
}
2 可以交易多次,但每次买入前,一定要把之前的卖出
思路:遍历数组,求出每相邻的俩个价格差
代码:
int maxProfit(vector<int>& prices) {
int pro=0;
for(int i=1;i<prices.size();i++)
pro += max(prices[i]-prices[i-1],0);
return pro;
}
3 只能交易俩次。求最大的利润
思路:
代码
int maxProfit(vector<int>& prices) {
int b1=INT_MIN;
int b2=INT_MIN;
int s1=0,s2=0;
for(int i : prices){
s2=max(s2,b2+i); //第二次出售获利
b2=max(b2,s1-i); //第二次买入
s1=max(s1,b1+i); //第一次出售
b1=max(b1,-i);
}
return s2;
}