LeetCode之蓄水量最大的容器(Container With Most Water)

問題描述:
給定n個非負的整數(shù) a1, a2, ..., an , 其中每一個代表坐標系 (i, ai)中的一個點. 畫出n條豎線,每條線的起點和終點分別為 (i, ai) 和 (i, 0). 找到其中的兩條線谣沸,它們和x軸一起組成一個容器使得該容器裝水最多粥鞋。

PS: 容器不會傾斜经伙,并且n最小是2。


上圖中的豎線由數(shù)組 [1,8,6,2,5,4,8,3,7]給出。 在這個實例中胳徽,最大蓄水量容器 (藍色區(qū)域)可蓄水容量是49 .png

示例:

輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49

一般解法

最容易想到的便是暴力法,針對每條豎線計算其和其前方所有豎線組成的容器蓄水量爽彤,最終得到這些豎線組成的所有容器中的最大值养盗。
時間復雜度
計算次數(shù)為\sum_{i=1}^ni= {n(n-1)\over 2},從而時間復雜度為O(n^2)适篙。
代碼實現(xiàn)

private static int solutionV1(int[] height) {
    if (height == null || height.length <= 1) {
        return 0;
    }
    int maxArea = Integer.MIN_VALUE;
    int curArea;
    for (int i = 1; i < height.length; i++) {
        for (int j = i - 1; j >= 0; j--) {
            curArea = Math.min(height[i], height[j]) * (i - j);
            if (maxArea < curArea) {
                maxArea = curArea;
            }
        }
    }
    return maxArea;
}

進階解法

一般解法的時間復雜度為O(n^2)往核,如果要優(yōu)化的話,我們需要找到更低階的解法嚷节,比如O(n)聂儒。
通過觀察可以發(fā)現(xiàn),對于任意的i硫痰,j(0 =< i < k < j< n)衩婚,如果h_i<=h_j,那么有:
area(i, j)=min(h_i, h_j) * (j - i)=h_i*(j-i)>h_i*(j-k)>=min(h_i, h_k)(k-i)=area(i,k)
所以對任意的k效斑,area(i,j)>area(i,k)非春,也就是說在所有包含i的容器中最大的就是area(i,j)
area(i,j)=max_{i,j}缓屠,那么maxArea=max(area(i+1,j),max_{i,j})奇昙。
同理,如果h_i>h_j敌完,那么就有:
area(i,j)=max_{i,j}储耐,那么maxArea=max(area(i,j-1),max_{i,j})
從上述的推理我們可以看出蠢挡,如果h_i<=h_j弧岳,我們便可以直接把i右移凳忙,否則把j左移,從而去掉一些不必要的計算禽炬,這樣便可以在O(n)時間內(nèi)得到結(jié)果涧卵。
代碼實現(xiàn)

private static int solutionV2(int[] height) {
    if (height == null || height.length <= 1) {
        return 0;
    }
    int maxArea = 0;
    int curArea;
    int s = 0, e = height.length - 1;
    while (s < e) {
        curArea = height[s] < height[e] ? (e - s) * height[s] : (e - s) * height[e];
        maxArea = maxArea > curArea ? maxArea : curArea;
        if (height[s] < height[e]) {
            s++;
        } else {
            e--;
        }
    }
    return maxArea;
}

總結(jié)

該題是典型的需要通過數(shù)學推理才能找到更優(yōu)解法的題型,十分有趣腹尖,特此整理紀念柳恐。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市热幔,隨后出現(xiàn)的幾起案子乐设,更是在濱河造成了極大的恐慌,老刑警劉巖绎巨,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件近尚,死亡現(xiàn)場離奇詭異,居然都是意外死亡场勤,警方通過查閱死者的電腦和手機戈锻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來和媳,“玉大人格遭,你說我怎么就攤上這事×敉” “怎么了拒迅?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長她倘。 經(jīng)常有香客問我璧微,道長,這世上最難降的妖魔是什么硬梁? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任往毡,我火速辦了婚禮,結(jié)果婚禮上靶溜,老公的妹妹穿的比我還像新娘开瞭。我一直安慰自己,他們只是感情好罩息,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布嗤详。 她就那樣靜靜地躺著,像睡著了一般瓷炮。 火紅的嫁衣襯著肌膚如雪葱色。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天娘香,我揣著相機與錄音苍狰,去河邊找鬼办龄。 笑死,一個胖子當著我的面吹牛淋昭,可吹牛的內(nèi)容都是我干的俐填。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翔忽,長吁一口氣:“原來是場噩夢啊……” “哼英融!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歇式,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤驶悟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后材失,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痕鳍,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年龙巨,在試婚紗的時候發(fā)現(xiàn)自己被綠了额获。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡恭应,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耘眨,到底是詐尸還是另有隱情昼榛,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布剔难,位于F島的核電站胆屿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏偶宫。R本人自食惡果不足惜非迹,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纯趋。 院中可真熱鬧憎兽,春花似錦、人聲如沸吵冒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痹栖。三九已至亿汞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間揪阿,已是汗流浹背疗我。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工咆畏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吴裤。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓旧找,卻偏偏與公主長得像,于是被迫代替她去往敵國和親嚼摩。 傳聞我的和親對象是個殘疾皇子钦讳,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 很久之前喜歡在豆瓣上寫日記、影評枕面,慢慢就懶了愿卒,不會好好寫完一天的心情,試試看吧潮秘,重新記錄自己的生活琼开。 回國三個月,...
    Esme55閱讀 176評論 0 0
  • 宋仲基上海粉絲見面會親筆信內(nèi)容 這是最后一封的信了枕荞! 大家好我是仲基柜候,這些日子過得好嗎?現(xiàn)在為大家寫這封信的時間7...
    歆曼閱讀 363評論 5 3
  • 近來讀孫郁散文集《秋夜閑談》躏精,里面有一段摘自廢名的議論渣刷,頗值得深思: “ 中國文章里沒有外國人的厭世觀。中國人生在...
    繁露閱讀 212評論 0 0
  • export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1...
    志壹閱讀 241評論 0 0
  • 前陣子看《改變自己》微信公眾號里推送的一篇文章矗烛,這個公眾號是我每天必看的辅柴,還注冊了會員,通過這個會員也對自己的某些...
    貓餅干閱讀 146評論 9 0