跟我堅持刷leetcode(第五天-進階版最大股票利潤)
對抗惰性,從今天做起。堅持每天刷leetcode並附帶一個題的題目,思路,程式碼。感興趣的小夥伴一起堅持來吧(c程式碼,不過思路都是差不多的)。
題目(難度困難):
給出一個陣列,第i個元素代表第i天的股票價格。假設你最多隻能買賣兩次股票(買一次,賣一次。再買,再賣。不能連著買兩次,再連著賣兩次。當然也可以只買賣一次),請求出你最多能賺到多少錢。
Input:[1,6,4,3,10,6,7]
Output:12
思路:
接著昨天的簡單版股票利潤,我先想到的是怎麼在原有的基礎改進。如果能儲存一下資料記錄對於某一天來說之前能賺多少錢,那麼加上上一題求出來的後面的最大值,就得到了以這一天為分割,左右兩側max的和。再比較一下這些和,求出最大值返回就行了。現在的問題就是如何求出左側max(程式碼裡是max1)的值,max的值有兩種情況,一種是分割點價值減去左側出現過的最小价值,另一種是直接等於上一天的max值。比較出最大值就是左側max值
程式碼:
int maxProfit(int* prices, int pricesSize) {
int min = prices[0];
int i = 1;
int temp = 0;
int max = 0;
int max2 = 0; //用來儲存有右面的最大值
int* max1 = malloc(sizeof(int)*pricesSize);//用來儲存左面的最大值
max1[0] = 0;
//下面的while記錄了以任何一天為分割點,左側利潤最大值。
while(i<pricesSize)
{
max1[i] = prices[i]-min;
if(max1[i]<max1[i-1])
max1[i] = max1[i-1];
if(prices[i]<min)
min = prices[i];
i++;
}
//下面的for按分割點迴圈,並跟蹤右側最大值,順便求出總的最大值
for(i=pricesSize-2;i>=0;i--)
{
temp = prices[i+1]-prices[i]+temp;
if(temp<0)
temp = 0;
if(temp>max2)
max2 = temp;
if((max1[i]+max2)>max)
max = max1[i]+max2;
}
if(max1[pricesSize-1]>max)
return max1[pricesSize-1];
else
return max;
}
相關文章
- Leetcode 題解系列 -- 股票的最大利潤(動態規劃)LeetCode動態規劃
- 劍指 Offer 63. 股票的最大利潤-Python題解Python
- 用 JavaScript 刷 LeetCode 的正確姿勢【進階】JavaScriptLeetCode
- LeetCode刷題進階之重新排列字串(1528)LeetCode字串
- Android 你應該知道的學習資源 進階之路貴在堅持Android
- 智慧手機紅利不再 手遊熱潮還能堅持多久
- 亞馬遜財報:2020年Q2亞馬遜淨利潤52億美元 為歷史上同期最大淨利潤亞馬遜
- 挑戰Java面試題複習第1天,堅持就是勝利Java面試題
- 【Leetcode刷題篇】leetcode152 乘積最大陣列LeetCode陣列
- 【刷演算法】LeetCode.53-最大子序和演算法LeetCode
- LINUX進階(持續更新)Linux
- 跟我一起刷leetCode演算法題11之 Maximum Product of Three NumbersLeetCode演算法
- 學習跪在堅持!
- 堅持程式設計程式設計
- 挑戰中,Java面試題複習第4天,堅持就是勝利。Java面試題
- Leetcode刷題628. 三個數的最大乘積LeetCode
- 【刷題筆記】LeetCode-53 最大子陣列和筆記LeetCode陣列
- 聊聊持續測試的進階
- 【刷演算法】LeetCode- 階乘後的零演算法LeetCode
- 英偉達淨利潤高達50% ARM成史上最大泡沫背後的半導體公司
- 單調棧進階-接雨水-最大矩形
- 騰訊淨利潤持續下滑,遊戲業務印鈔機為何失靈?遊戲
- welearn自動刷題指令碼刷課新起點進階綜合教程指令碼
- 【LeetCode刷題(中等程度)】662. 二叉樹最大寬度LeetCode二叉樹
- LeetCode刷題:數學篇(C++實現,持續更新中...)LeetCodeC++
- 堅持就會有回報
- goCms-持續更新,希望能堅持下去Go
- LeetCode刷題進階之有多少小於當前數字的數字(1365)(暴力求解)LeetCode
- GitHub加速指南進階版Github
- 【Leetcode刷題篇】leetcode812 最大三角形面積LeetCode
- golang刷leetcodeGolangLeetCode
- 不可錯過的「持續整合」進階指南
- LeetCode刷題之路:67. 二進位制求和LeetCode
- 蘋果憑什麼搶走全球智慧手機利潤91%的營業利潤蘋果
- 因為專業,所以堅持(轉)
- js堅持不懈之11:focus()方法JS
- Gitlab堅持用雲的原因Gitlab
- 學習貴在堅持——效率啊