121. Best Time to Buy and Sell Stock

Say you have an array for which the ith element is the price of a given stock on day i.

If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Example 1:
Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.

讀題

題目的意思就是給你一個數(shù)組篓吁,第i個元素表示第i天貨物的價格铭污,假定只允許進行一次交易,求最大的利潤

源碼地址

解題思路

要想獲得最大的利潤就是要低買高賣惋嚎,也就是以最低的價格買入以最高的價格賣出,還要明確的是賣一定是在買之后嘲驾。

可能會想到用兩層循環(huán)解決這樣的問題展鸡,但是會存在超時的情況,再者如果一個數(shù)組是遞增的九昧,那么你外層循環(huán)是沒有意義的,如果一個數(shù)組是遞減的毕匀,那么也不存在獲利的情況铸鹰,所有用兩層循環(huán)去解決是不現(xiàn)實的。

我們要盡量使用O(n)時間復(fù)雜度去完成這樣一個任務(wù)

價格波動.png

我們看這張圖片期揪,假定我們在a點買入掉奄,在b點賣出,那么我們在[a,b]之間就實現(xiàn)了當前的利潤最大凤薛,那么如果我們在a點買入姓建,c點賣出就是虧了,如果我們在c點之后的某時刻(價格高于a點的價格)賣出缤苫,這個時候在c點買入肯定要比在a點買入的利潤大速兔,明白了這一點就好辦了,其實我們的任務(wù)就是找最低買入價活玲!

代碼演示

package com.xiaoysec;

public class Solution121 {
    public int maxProfit(int[] prices){
        if(prices.length <= 1)
            return 0;
        //當前的最低買入價
        int minPrice = prices[0];
        int maxPrice = 0;
        //O(n)的時間復(fù)雜度
        for(int i=1;i<prices.length;i++){
            //如果當前的價格比最低價低就作為買入價
            if(prices[i]<minPrice)
                minPrice = prices[i];
            else
                //當前的價格高于買入價(最低價)就計算利潤并與最大利潤比較
                maxPrice = Math.max(maxPrice, prices[i]-minPrice);
        }
        return maxPrice;
    }
    
    public static void main(String[] args){
        int[] prices = {7, 1, 5, 3, 6, 4};
        Solution121 solution = new Solution121();
        int maxprofix = solution.maxProfit(prices); 
        System.out.println(maxprofix);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涣狗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舒憾,更是在濱河造成了極大的恐慌镀钓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镀迂,死亡現(xiàn)場離奇詭異丁溅,居然都是意外死亡,警方通過查閱死者的電腦和手機探遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門窟赏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人箱季,你說我怎么就攤上這事涯穷。” “怎么了藏雏?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵拷况,是天一觀的道長。 經(jīng)常有香客問我,道長赚瘦,這世上最難降的妖魔是什么最疆? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚤告,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘服爷。我一直安慰自己杜恰,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布仍源。 她就那樣靜靜地躺著心褐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笼踩。 梳的紋絲不亂的頭發(fā)上逗爹,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音嚎于,去河邊找鬼掘而。 笑死,一個胖子當著我的面吹牛于购,可吹牛的內(nèi)容都是我干的袍睡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼肋僧,長吁一口氣:“原來是場噩夢啊……” “哼斑胜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫌吠,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤止潘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辫诅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凭戴,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年泥栖,在試婚紗的時候發(fā)現(xiàn)自己被綠了簇宽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡吧享,死狀恐怖魏割,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钢颂,我是刑警寧澤钞它,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響遭垛,放射性物質(zhì)發(fā)生泄漏尼桶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一锯仪、第九天 我趴在偏房一處隱蔽的房頂上張望泵督。 院中可真熱鬧,春花似錦庶喜、人聲如沸小腊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秩冈。三九已至,卻和暖如春斥扛,著一層夾襖步出監(jiān)牢的瞬間入问,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工稀颁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芬失,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓峻村,卻偏偏與公主長得像麸折,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粘昨,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容