leetcode 動態規劃 買賣股票的最佳時機含手續費 java
題目描述
給定一個整數陣列 prices,其中第 i 個元素代表了第 i 天的股票價格 ;非負整數 fee 代表了交易股票的手續費用。
你可以無限次地完成交易,但是你每筆交易都需要付手續費。如果你已經購買了一個股票,在賣出它之前你就不能再繼續購買股票了。
返回獲得利潤的最大值。
注意:這裡的一筆交易指買入持有並賣出股票的整個過程,每筆交易你只需要為支付一次手續費。
示例 1:
輸入: prices = [1, 3, 2, 8, 4, 9], fee = 2
輸出: 8
解釋: 能夠達到的最大利潤:
在此處買入 prices[0] = 1
在此處賣出 prices[3] = 8
在此處買入 prices[4] = 4
在此處賣出 prices[5] = 9
總利潤: ((8 - 1) - 2) + ((9 - 4) - 2) = 8.
方法一:
可以使用“最佳買賣股票時機含冷凍期”中的方法,有兩個狀態,buy[i]和sell[i] ,區別是:
1.沒有冷凍期,所以可以在第i-1天賣出之後,在第i天繼續買
2.賣出股票的時候需要減去手續費
class Solution {
public int maxProfit(int[] prices, int fee) {
int len = prices.length;
if(len <= 1){
return 0;
}
int buy[] = new int[len];
int sell[] = new int[len];
buy[0] = -prices[0];
sell[0] = 0;
buy[1] = Math.max(buy[0],-prices[1]);
sell[1] = Math.max(sell[0],buy[0]+prices[1]-fee);
for(int i = 2;i<len;i++){
buy[i] = Math.max(buy[i-1],sell[i-1]-prices[i]);
sell[i] = Math.max(sell[i-1],buy[i-1]+prices[i]-fee);
}
return sell[len-1];
}
}
方法二:
與上面的思路一樣,但是隻有兩個變數,buy和sell
class Solution {
public int maxProfit(int[] prices, int fee) {
int buy = -prices[0];
int sell = 0;
for(int i = 1;i < prices.length;i++){
sell = Math.max(sell,buy+prices[i]-fee);
buy = Math.max(buy,sell - prices[i]);
}
return sell;
}
}
相關文章
- Day 44 | 714.買賣股票的最佳時機含手續費
- 【LeetCode動態規劃#13】買賣股票含冷凍期(狀態眾多,比較繁瑣)、含手續費LeetCode動態規劃
- Java演算法之動態規劃詳解-買賣股票最佳時機Java演算法動態規劃
- 「leetcode」714. 買賣股票的最佳時機含手續費 超詳細講解LeetCode
- 【動態規劃】買賣股票動態規劃
- [力扣每日一題]714. 買賣股票的最佳時機含手續費力扣每日一題
- 演算法系列-動態規劃(4):買賣股票的最佳時機演算法動態規劃
- 程式碼隨想錄演算法訓練營第48天 | 188.買賣股票的最佳時機IV 、309.最佳買賣股票時機含冷凍期、 714.買賣股票的最佳時機含手續費演算法
- 買賣股票的最佳時機 IV javaJava
- leetcode 121 買賣股票的最佳時機LeetCode
- Leetcode121. 買賣股票的最佳時機LeetCode
- LeetCode-Java:122. 買賣股票的最佳時機ⅡLeetCodeJava
- leetcode 123 買賣股票的最佳時機 IIILeetCode
- leetcode 122 買賣股票的最佳時機 IILeetCode
- 122. 買賣股票的最佳時機 II-簡單-動態規劃、貪心演算法動態規劃演算法
- 121. 買賣股票的最佳時機
- [Leetcode]123.買賣股票的最佳時機3LeetCode
- LeetCode-122-買賣股票的最佳時機 IILeetCode
- LeetCode122. 買賣股票的最佳時機 IILeetCode
- 買賣股票相關演算法-動態規劃-python演算法動態規劃Python
- leetcode【每日一題】122. 買賣股票的最佳時機 II JavaLeetCode每日一題Java
- LeetCode《買賣股票的最佳時機》系列題目,最詳解LeetCode
- 【LeetCode動態規劃#12】詳解買賣股票I~IV,經典dp題型LeetCode動態規劃
- 程式碼隨想錄演算法訓練營 | 121.買賣股票的最佳時機,122.買賣股票的最佳時機II,123.買賣股票的最佳時機III演算法
- 【LeetCode】309. Best Time to Buy and Sell Stock with Cooldown 最佳買賣股票時機含冷凍期(Medium)(JAVA)LeetCodeJava
- 力扣之陣列——買賣股票的最佳時機力扣陣列
- 力扣-121. 買賣股票的最佳時機力扣
- LeetCode 188 買賣股票的最佳時機IV HERODING的LeetCode之路LeetCode
- 線性dp:LeetCode122.買賣股票的最佳時機llLeetCode
- 陣列筆試題之買賣股票的最佳時機陣列筆試
- 力扣-122. 買賣股票的最佳時機 II力扣
- day53 動態規劃part10 程式碼隨想錄演算法訓練營 121. 買賣股票的最佳時機動態規劃演算法
- 演算法122. 買賣股票的最佳時機 II演算法
- 【演算法】【線性表】【陣列】買賣股票的最佳時機演算法陣列
- Leetcode121、買賣股票的最佳時機(Python題解)只買一次,位元組跳動面試題LeetCodePython面試題
- 【演算法】【線性表】【陣列】買賣股票的最佳時機 II演算法陣列
- 【leetcode】40-best-time-to-buy-and-sell-stock 力扣 121. 買賣股票的最佳時機LeetCode力扣
- Leetcode 題解系列 -- 股票的最大利潤(動態規劃)LeetCode動態規劃