本次题目
- 122 买卖股票的最佳时机II
- 714 买卖股票的最佳时机含手续费
122 买卖股票的最佳时机II
- 局部最优:将利润分解为每天计算(当天价格减去前一天价格),收集所有的正利润。可动态规划。
class Solution {
public int maxProfit(int[] prices) {
int profits = 0;
for(int i = 1; i < prices.length; i++){
if(prices[i] - prices[i - 1] > 0) profits += prices[i] - prices[i - 1];
}
return profits;
}
}
714 买卖股票的最佳时机含手续费
- 同上122 买卖股票的最佳时机II,但是每次买卖需要手续费,局部最优:最低值买入,最高值卖出(去掉手续费还有利润)。买入时选择最低点,卖出时选择连续利润区间中的最后一天。
- 注意:选择连续利润区间的最后一天可以在当天价格有利润时将最小价格记录为当前价格减去手续费,后续计算不会重复减手续费。可动态规划。
class Solution {
public int maxProfit(int[] prices, int fee) {
int minprice = prices[0];
int profits = 0;
for(int price : prices){
if(price < minprice) minprice = price;
if(price > minprice + fee){
profits += price - minprice - fee;
minprice = price - fee;
}
}
return profits;
}
}