Java刷題隨筆---121. 買賣股票的最佳時機

121. 買賣股票的最佳時機 - 力扣(LeetCode) (leetcode-cn.com)

難度:簡單
題目描述:給定一個數組 prices 幔翰,它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。
你只能選擇 某一天 買入這只股票米绕,并選擇在 未來的某一個不同的日子 賣出該股票致份。設計一個算法來計算你所能獲取的最大利潤哟冬。
返回你可以從這筆交易中獲取的最大利潤。如果你不能獲取任何利潤,返回 0 识椰。

類型一樣的題
股票問題系列通解(轉載翻譯) - 力扣(LeetCode) (leetcode-cn.com)

分析

本題為求股票買入賣出之間的最大利潤入愧,實際上是求數組中最大數和最小數的差值問題鄙漏, 
但是股票的買賣存在這先買后賣的順序性嗤谚,故尋找數組中最大數和最小數則為相對于位置來說的 
例如數組[7,1,5,3,6,4]中,最小值為1怔蚌,最大值為7巩步,但是不存在先賣后買的情況,所以只能尋找最小值1后面的最大值6桦踊,故差值為5椅野,即利潤為5 
清楚了題目要求后就變得簡單了很多,可以使用雙指針的方法籍胯,一個指針為buy竟闪,指向買股票時的價格,另一個指針為sale芒炼,指向賣股票時的價格 
profit = sale - buy 
這時就可以遍歷數組瘫怜,通過遍歷尋找買股票的最低點和賣股票的最高點。 
由于1 <= prices.length <= 105 所以對于buy和sale取值之前需要判斷數組長度本刽,如果數組長度為1鲸湃,則直接返回0。 
并且此方法還有一種情況子寓,即數組就兩個元素暗挑,例如:[7,1] 
這種情況下profit初始化為-6,不符合題目標準斜友,所以在返回值處需要進行判斷 

優(yōu)化: 
本題實質上不需要考慮sale值的存儲炸裆,因為sale值可以通過遍歷數組得到prices[i], 
而且profit值的變更也可以不考慮sale值

解題

優(yōu)化前

class Solution {
    public int maxProfit(int[] prices) {
        if (prices.length < 2){
                return 0;
            }
        int buy = prices[0];
        int sale = prices[1];
        int profit = sale - buy;
        for (int i = 1; i < prices.length - 1; i++) {
            if (prices[i] < buy) {
                buy = prices[i];
            }
            if (prices[i + 1] - buy > profit) {
                sale = prices[i + 1];
                profit = sale - buy;
            }
        }
        return profit > 0 ? profit : 0;
    }
}

優(yōu)化后

class Solution {
        public int maxProfit(int[] prices) {
            int buy = prices[0];
            int profit = 0;
            for (int i = 1; i < prices.length; i++) {
                if (prices[i] - buy > profit) {
                    profit = prices[i] - buy;
                }
                buy = prices[i] < buy ? prices[i] : buy;
            }

            return profit;
        }
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末鲜屏,一起剝皮案震驚了整個濱河市烹看,隨后出現的幾起案子,更是在濱河造成了極大的恐慌洛史,老刑警劉巖惯殊,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異也殖,居然都是意外死亡土思,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門忆嗜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來己儒,“玉大人,你說我怎么就攤上這事捆毫∩镣澹” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵绩卤,是天一觀的道長响谓。 經常有香客問我损合,道長省艳,這世上最難降的妖魔是什么娘纷? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮跋炕,結果婚禮上赖晶,老公的妹妹穿的比我還像新娘。我一直安慰自己辐烂,他們只是感情好遏插,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纠修,像睡著了一般胳嘲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扣草,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天了牛,我揣著相機與錄音,去河邊找鬼辰妙。 笑死鹰祸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的密浑。 我是一名探鬼主播蛙婴,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尔破!你這毒婦竟也來了街图?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤懒构,失蹤者是張志新(化名)和其女友劉穎餐济,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體痴脾,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡颤介,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了赞赖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滚朵。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖前域,靈堂內的尸體忽然破棺而出辕近,到底是詐尸還是另有隱情,我是刑警寧澤匿垄,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布移宅,位于F島的核電站归粉,受9級特大地震影響,放射性物質發(fā)生泄漏漏峰。R本人自食惡果不足惜糠悼,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浅乔。 院中可真熱鬧倔喂,春花似錦、人聲如沸靖苇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贤壁。三九已至悼枢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脾拆,已是汗流浹背馒索。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留假丧,地道東北人双揪。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像包帚,于是被迫代替她去往敵國和親渔期。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354