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 第136場周賽解題報告LeetCode
- LeetCode刷題之第701題LeetCode
- Leetcode第1~10題LeetCode
- LeetCode 第 69 題 (Sqrt(x))LeetCode
- LeetCode 第 7 題(Reverse Integer)LeetCode
- LeetCode 第 342 題(Power of Four)LeetCode
- LeetCode 第 343 題 (Integer Break)LeetCode
- LeetCode 第 66 題 (Plus One)LeetCode
- leetcode演算法題解(Java版)-14-第k小數問題LeetCode演算法Java
- LeetCode 第 50 題 (Pow(x, n))LeetCode
- LeetCode 第 9 題(Palindrome Number)LeetCode
- LeetCode 第 190 題 (Reverse Bits)LeetCode
- LeetCode 第 37 題 (Sudoku Solver)LeetCode
- LeetCode 第 326 題 (Power of Three)LeetCode
- LeetCode 第 65 題(Valid Number)LeetCode
- leetcode題解(陣列問題)LeetCode陣列
- Leetcode題解1-50題LeetCode
- [leetcode 題解] 849LeetCode
- Leetcode 全套題解LeetCode
- 「LeetCode」全部題解LeetCode
- KMP演算法(Leetcode第28題)KMP演算法LeetCode
- leetcode的第9題:迴文數LeetCode
- LeetCode 第 231 題 (Power of Two)LeetCode
- LeetCode 第 191 題 (Number of 1 Bits)LeetCode
- LeetCode 第 338 題 (Counting Bits)LeetCode
- LeetCode 第 14 題(Longest Common Prefix)LeetCode
- leetcode題解(查詢表問題)LeetCode
- Leetcode 565 & 240 題解LeetCode
- LeetCode 解題彙總LeetCode
- leetcode解題目錄LeetCode
- LeetCode 第 125 題 (Valid Palindrome)LeetCode
- LeetCode 第 21 題 (Merge Two Sorted Lists)LeetCode
- Leetcode已刷題目題解彙總LeetCode
- leetcode【每日一題】122. 買賣股票的最佳時機 II JavaLeetCode每日一題Java
- leetcode題解(0-1揹包問題)LeetCode
- LeetCode解題記錄(雙指標專題)LeetCode指標
- LeetCode 第 86 號問題:分割連結串列LeetCode