贪心解决股票问题
1.买卖股票的最佳时机 II
我们只需要记录后一个比前一个值大的即可
class Solution {
/**
贪心算法:[7,1,5,3,6,4]
利润:[-6,4,-2,3,-2]
我们只收集利润中的正数
*/
public int maxProfit(int[] prices) {
int sum = 0;
for(int i=1;i<prices.length;i++){
sum+=Math.max(0,prices[i]-prices[i-1]);
}
return sum;
}
}
2. 买卖股票的最佳时机含手续费
两题的区别在于本题需要考虑手续费,当购买价格高于当前出售价格时,更新购买价格;当购买价格低于当前出售价格时,我们需要出售股票,更新购买价格。
class Solution {
public int maxProfit(int[] prices, int fee) {
int buy = prices[0]+fee;
int sum = 0;
for(int p:prices){
if(p+fee<buy){
buy=p+fee;
}else if(p>buy){
sum+=p-buy;
buy = p;
}
}
return sum;
}
}