LeetCode-121. 买卖股票的最佳时机(java)
一、前言:
👨?🎓作者:bug菌
??博客:CSDN、掘金等
💌公眾號:猿圈奇妙屋
🚫特別聲明:原創不易,轉載請附上原文出處鏈接和本文聲明,謝謝配合。
🙏版權聲明:文章里可能部分文字或者圖片來源于互聯網或者百度百科,如有侵權請聯系bug菌處理。
? ? ? ?哈嘍,小伙伴們,我是bug菌呀👀。金三銀四,又到了刷題月啦。所以不管你是準備跳槽還是在職,都一起行動起來,順應這個時代月干點該干的事兒👣。所以,趕緊跟著bug菌的步伐卷起來吧?,變強從這一刻開始!?🧈
? ? ? ?小伙伴們在批閱文章的過程中如果覺得文章對您有一絲絲幫助,還請別吝嗇您手里的贊呀,大膽的把文章點亮👍吧,您的點贊三連(收藏??+關注👨?🎓+留言📃)就是對bug菌我創作道路上最好的鼓勵與支持😘。時光不棄🏃🏻?♀?,創作不停💕,加油??
二、題目描述:
題目:
給定一個數組 prices ,它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。 你只能選擇 某一天 買入這只股票,并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。 返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤,返回 0 。具體請看如下示例:
示例 1:
輸入:[7,1,5,3,6,4] 輸出:5 解釋:在第 2 天(股票價格 = 1)的時候買入,在第 5 天(股票價格 = 6)的時候賣出,最大利潤 = 6-1 = 5 。注意利潤不能是 7-1 = 6, 因為賣出價格需要大于買入價格;同時,你不能在買入前賣出股票。示例 2:
輸入:prices = [7,6,4,3,1] 輸出:0 解釋:在這種情況下, 沒有交易完成, 所以最大利潤為 0。提示:
- 1 <= prices.length <= 105
- 0 <= prices[i] <= 104
題目難度:??
三、思路分析:
? ? ? ?拿到這題,其實是有點氣憤的,雖然我玩的是基金而不是股票,但是也是一樣的低買高賣原則嘛,想從中撈點高低差,但是最近股市是真的一塌糊涂,虧死了。這不剛好又刷到這道題,買賣股票啥時候時機最好,這市場變化莫測,壓根沒這道題這么悠哉好吧。如下我就來講講這道題是如何實現股票的買賣最佳時機。
? ? ? ?我們只要用一個變量來記錄股票最低價格?minValue,這樣我們就可以假設股票是在那天買進的。那么我們在第 i 天賣出股票所獲得的利潤為?prices[i] - minValue。所以一次遍歷即可:
- 定義一個最低價格minValue。然后開始遍歷該數組。
- 當?(prices[i]-minValue) > max時,說明買賣股票的最大值可以是當前i,即把(prices[i]-minValue)?賦值給max即可。
- 當?prices[i] < minValue時,說明存在比當前股票價格更低的價,即把prices[i]?賦值給minValue即可。
四、算法實現:
AC代碼
具體算法代碼實現如下:
class Solution {public int maxProfit(int[] prices) {//初始化最小值int minValue = prices[0];//初始化最大收益為0int max = 0;//開始遍歷for (int i = 0; i < prices.length; i++) {//維護最大收益if ((prices[i] - minValue) > max) {max = prices[i] - minValue;}//維護股票入價最小值if(prices[i] <minValue){minValue = prices[i];}}return max;} }五、總結:
leetcode提交運行結果截圖如下:
?復雜度分析:
- 時間復雜度:O(n)。只需要遍歷一次。
- 空間復雜度:O(1)。只使用了常數個變量。
? ? ? ?這題其實跟生活中很多場景就很貼切了,比如我們玩的股票、基金,都說會買的不是高手,而是會賣的,雖然啊這沒有此題這么簡單啦,直接告訴你一個周期的股票價格,然后從中讓你進行操盤,計算那天買入那天賣出才能獲得最高收益,還是挺好玩的,簡單題。
? ? ? ?再者,解題道路千萬條,歡迎小伙伴們腦洞大開,如果你們有啥更好的想法或者思路,歡迎評論區告訴我哦,大家一起互相借鑒互相學習,方能成長的更快。
? ? ? ?好啦,以上就是本期的所有內容啦,咱們下期見咯。
六、熱門推薦:
七、文末:
????????如果你還想要學習更多,小伙伴們大可關注bug菌專門為你們創建的專欄《每日一題LeetCode》,帶著你一塊兒刷題,專欄每一篇都附帶詳細解法,手把手帶你解題。
????????一個人刷可能會覺得很累很難堅持,但是一群人刷就會覺得它是一件很有意義的事兒,互相督促互相鼓勵,一起變強。
? ? ? ?我是bug菌,一名想走👣出大山改變命運的程序猿。接下來的路還很長,都等待著我們去突破、去挑戰。來吧,小伙伴們,我們一起加油!未來皆可期,fighting!
最后送大家兩句話,與諸君共勉!
??做你想做的人,沒有時間限制,只要愿意,什么時候都可以start,
🍀你能從現在開始改變,也可以一成不變,這件事,沒有規矩可言,你可以活出最精彩的自己。
??
💌如果文章對您有所幫助,就請留下您的贊吧!(#^.^#);
💝如果喜歡bug菌分享的文章,就請給bug菌點個關注吧!(?′?‵?)づ╭?~;
💗如果對文章有任何疑問,還請文末留言或者加群吧【QQ交流群:708072830】;
💞鑒于個人經驗有限,所有觀點及技術研點,如有異議,請直接回復參與討論(請勿發表攻擊言論,謝謝);
💕版權聲明:原創不易,轉載請附上原文出處鏈接和本文聲明,版權所有,盜版必究!!!謝謝。
總結
以上是生活随笔為你收集整理的LeetCode-121. 买卖股票的最佳时机(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五大券商研报:逢大跌买入这些股
- 下一篇: 猿创征文|我的四个月Java学习成长之路