LeetCode題解第122題
LeetCode第122題:
122題.買賣股票的最佳時機
1、思路:如果第二天的售價大於當天的售價則當天買入第二天賣出,這樣算的話可能出現當天賣出又買入的情況,所以不是實際的買入和賣出過程,僅僅是為了算出最大利潤而採用的方法。
class Solution {
public int maxProfit(int[] prices) {
int count = 0;
for(int i = 0; i < prices.length - 1; i++){
if(prices[i + 1] > prices[i]){ //如果有利可圖則進行買賣操作
count += prices[i + 1] - prices[i];
}
}
return count;
}
}
2、思路:考慮每天結束時的兩種狀態,持有股票和不持有股票,而這兩種狀態到當天的最大利潤僅於前一天的兩種狀態的利潤有關。
1)在當天結束持有股票時,分為兩種情況,股票是當天買的,則此時利潤為前一天不持有股票的利潤去掉當天股票的價格,或者股票不是當前買的,則此時利潤為前一天持有股票的利潤,在二者選大的,則為當天結束持有股票的最大利潤
2)在當天結束不持有股票也分為兩種情況,股票是當天賣出的,則此時利潤為前一天持有股票的利潤加上當天股票的價格,或者股票不是當天賣出的,則此時利潤為前一天不持有股票的利潤,在二者選大的,則為當天結束不持有股票的最大利潤
可知,全部交易後,不持有股票的利潤肯定大於持有股票的利潤,則最後返回不持有股票的最大利潤即為答案
class Solution {
public int maxProfit(int[] prices) {
int none = 0;//定義初始狀態,不持有股票利潤為0
int have = -prices[0];//持有股票利潤為負的第一天的售價
for(int i = 1; i < prices.length; i++){
//利用臨時變數儲存當天兩種狀態可獲得的最大利潤
int none1 = none > have + prices[i]?none:have+prices[i];
int have1 = have > none - prices[i]?have:none - prices[i];
none = none1;
have = have1;
}
return none;
}
}
相關文章
- [leetcode 第 400 場周賽]題解LeetCode
- LeetCode刷題之第701題LeetCode
- Leetcode第1~10題LeetCode
- Leetcode 第136場周賽解題報告LeetCode
- leetcode演算法題解(Java版)-14-第k小數問題LeetCode演算法Java
- [leetcode 題解] 849LeetCode
- Leetcode 全套題解LeetCode
- Leetcode題解1-50題LeetCode
- leetcode題解(陣列問題)LeetCode陣列
- KMP演算法(Leetcode第28題)KMP演算法LeetCode
- leetcode的第9題:迴文數LeetCode
- leetcode【每日一題】122. 買賣股票的最佳時機 II JavaLeetCode每日一題Java
- leetcode題解(查詢表問題)LeetCode
- Leetcode 565 & 240 題解LeetCode
- LeetCode 解題彙總LeetCode
- 【leetcode 399 周賽】【題解】LeetCode
- leetcode題解【持續更新】LeetCode
- LeetCode 第 86 號問題:分割連結串列LeetCode
- leetcode題解(0-1揹包問題)LeetCode
- LeetCode解題記錄(雙指標專題)LeetCode指標
- JavaScript實現-LeetCode刷題-【對稱二叉樹】-第101題!!!JavaScriptLeetCode二叉樹
- leetcode 解題 2.兩數相加-python3 題解LeetCodePython
- 用指令碼整理Leetcode題解指令碼LeetCode
- leetcode題解(動態規劃)LeetCode動態規劃
- [LeetCode解題] -- 零錢兌換LeetCode
- LeetCode刷題記錄與題解(C++版本)LeetCodeC++
- LeetCode第 146 號問題: LRU 快取機制LeetCode快取
- python challenge 解題 第4關Python
- leetcode 831題解【C++/Java/Python】LeetCodeC++JavaPython
- Leetcode Weekly Contest 95解題報告LeetCode
- LeetCode Weekly Contest 96 解題報告LeetCode
- Leetcode 記錄 不會解的題LeetCode
- LeetCode題解(0407):接雨水II(Python)LeetCodePython
- leetcode之兩數相加解題思路LeetCode
- Leetcode之javascript解題(No33-34)LeetCodeJavaScript
- leetcode題解(遞迴和回溯法)LeetCode遞迴
- LeetCode - 解題筆記 - 12 - Integer to RomanLeetCode筆記
- LeetCode題解(1652):拆炸彈(Python)LeetCodePython