編程練習(xí)-盛最多水的容器

昨晚難得忙的差不多驮履,自己有點(diǎn)時(shí)間惭蟋,做了道中等難度的題

題目—LeetCode盛最多水的容器

給定 n 個(gè)非負(fù)整數(shù) a1,a2逼泣,...趴泌,an,每個(gè)數(shù)代表坐標(biāo)中的一個(gè)點(diǎn) (i, ai) 拉庶。在坐標(biāo)內(nèi)畫(huà) n 條垂直線嗜憔,垂直線 i 的兩個(gè)端點(diǎn)分別為 (i, ai) 和 (i, 0)。找出其中的兩條線氏仗,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水吉捶。


示例圖片

圖中垂直線代表輸入數(shù)組 [1,8,6,2,5,4,8,3,7]。在此情況下皆尔,容器能夠容納水(表示為藍(lán)色部分)的最大值為 49呐舔。

  • 示例

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

以上題目描述就照搬原文了

思路

  • 思路一:暴力法
    首先,這道題最容易想到的就是暴力法慷蠕,即計(jì)算每?jī)蓚€(gè)之間的盛水量滋早,1和之后的每一個(gè)比較,2和之后的每一個(gè)比較砌们,n-1和n比較,即k不和k-1比較搁进。這樣結(jié)果肯定是能得到的浪感,但是效率不言而喻,若出現(xiàn)在筆試題中饼问,肯定時(shí)間等過(guò)不了影兽。
    來(lái)分析一下暴力法的時(shí)間復(fù)雜度:

    • 第一個(gè)數(shù)和后面n-1個(gè)數(shù)比較,次數(shù)為(n-1)莱革。
    • 第二個(gè)數(shù)和后面n-2個(gè)數(shù)比較峻堰,次數(shù)為(n-2)。
    • ......
    • 第n-1個(gè)數(shù)和后面第n個(gè)數(shù)比較盅视,次數(shù)為n-(n-1)捐名。
      O(N) = n-1 + n-2 + n-3 +,......,+n-(n-1) = (n^2-n)/2,(還去查了一下等差數(shù)列求和闹击,手動(dòng)捂臉)因此時(shí)間復(fù)雜度為O(N^2)
  • 思路二:雙指針?lè)?br> 通常在涉及到數(shù)組遍歷時(shí)镶蹋,能在一次遍歷找到結(jié)果,是最好的結(jié)局,題目需要的是兩個(gè)下標(biāo)的數(shù)字去求解結(jié)果贺归,因此想到雙指針的方案淆两,從左到右i,和從右到左j拂酣。那么問(wèn)題就在于如何移動(dòng)下標(biāo)秋冰?其實(shí)很容易,當(dāng)然是移動(dòng)下標(biāo)處值較小的下標(biāo)婶熬。
    來(lái)分析一下時(shí)間復(fù)雜度:

    • 無(wú)論是左下標(biāo)移動(dòng)還是右下標(biāo)移動(dòng)剑勾,最后都只會(huì)遍歷一遍數(shù)組,因此時(shí)間復(fù)雜度為O(N)

實(shí)現(xiàn)(java)

  • 思路一:暴力法
public static int maxArea(int[] height) {
        int maxWater = 0;
        for(int i = 0; i < height.length -1; i++) {
            for(int j = i+1; j < height.length; j++) {
                int higth = height[i] < height[j] ? height[i] : height[j];
                int tempWater = higth * (j - i);
                if(maxWater < tempWater)
                    maxWater = tempWater;
            }
        }
        return maxWater;
    }
  • 思路二:雙指針?lè)?/li>
public static int maxArea2(int[] height) {
        int maxWater = 0;
        int i = 0, j = height.length - 1;
        int hight = 0;
        int temp = 0;
        while(i != j) {
            hight = height[i] < height[j] ? height[i] : height[j];
            temp = hight * (j - i);
            if(temp > maxWater)
                maxWater = temp;
            if(height[i] <= height[j]) {
                i++;
            } else {
                j--;
            }
        }
        return maxWater;
    }

在上面方法中尸诽,沒(méi)有用到Java的Math類甥材,主要是之前聽(tīng)人說(shuō),這些類的使用會(huì)使得運(yùn)行時(shí)間變長(zhǎng)性含。所以我為了驗(yàn)證洲赵,就有了下面的方法

public static int maxArea3(int[] height) {
        int maxWater = 0;
        int i = 0, j = height.length - 1;
        while(i != j) {
            maxWater = Math.max(maxWater, Math.min(height[i], height[j]) * (j - i));
            if(height[i] <= height[j]){
                i++;
            }
            else{
                j--;
            }
        }
        return maxWater;
    }

那么暴力法究竟效率有多低,使用Math類的處理商蕴,又和沒(méi)用Math類的處理方法有何區(qū)別叠萍?直接上圖。


效率對(duì)比

對(duì)比發(fā)現(xiàn):

  1. 暴力法確實(shí)效率低绪商。
  2. 使用Math類并不會(huì)使得效率有多大的改變苛谷,所以以后可以使用這些數(shù)學(xué)類,減少代碼格郁。

最后

此致腹殿,敬禮

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市例书,隨后出現(xiàn)的幾起案子锣尉,更是在濱河造成了極大的恐慌,老刑警劉巖决采,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件自沧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡树瞭,警方通過(guò)查閱死者的電腦和手機(jī)拇厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晒喷,“玉大人孝偎,你說(shuō)我怎么就攤上這事〕瘢” “怎么了邪媳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵捐顷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雨效,道長(zhǎng)迅涮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任徽龟,我火速辦了婚禮叮姑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘据悔。我一直安慰自己传透,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布极颓。 她就那樣靜靜地躺著朱盐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪菠隆。 梳的紋絲不亂的頭發(fā)上兵琳,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音骇径,去河邊找鬼躯肌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛破衔,可吹牛的內(nèi)容都是我干的清女。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晰筛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嫡丙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起读第,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤迄沫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卦方,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泰佳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年盼砍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逝她。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浇坐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出黔宛,到底是詐尸還是另有隱情近刘,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站觉渴,受9級(jí)特大地震影響介劫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜案淋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一座韵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧踢京,春花似錦誉碴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蹈丸,卻和暖如春成黄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背白华。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工慨默, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人弧腥。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓厦取,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親管搪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虾攻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 在C語(yǔ)言中,五種基本數(shù)據(jù)類型存儲(chǔ)空間長(zhǎng)度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來(lái)閱讀 3,341評(píng)論 0 2
  • 回溯算法 回溯法:也稱為試探法,它并不考慮問(wèn)題規(guī)模的大小更鲁,而是從問(wèn)題的最明顯的最小規(guī)模開(kāi)始逐步求解出可能的答案霎箍,并...
    fredal閱讀 13,650評(píng)論 0 89
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子澡为,小兔子...
    趙宇_阿特奇閱讀 1,864評(píng)論 0 2
  • 1.用js實(shí)現(xiàn)隨機(jī)選取10~100之間的10個(gè)數(shù)字漂坏,存入一個(gè)數(shù)組,并排序 //要是獲取不重復(fù)的媒至,則對(duì)隨機(jī)數(shù)...
    persistlu閱讀 5,577評(píng)論 0 0
  • 2018年5月31日星期四(農(nóng)歷四月十七)天氣晴 時(shí)間過(guò)得真快岸ケ稹!不知不覺(jué)的2018年過(guò)了5個(gè)月了拒啰,今天是5月份的...
    wzy知足常樂(lè)閱讀 111評(píng)論 0 0