每周一道算法題(七)

本周的題目有點(diǎn)意思,有點(diǎn)“奧數(shù)題”的感覺,難度級別也是"Medium"...

題目:現(xiàn)在有n個非負(fù)整數(shù)a1,a2,…,an,每個數(shù)代表一個點(diǎn)(i, ai),每個點(diǎn)做x軸的垂線<(0,i), (i,ai)>。每兩條這樣的豎線和x軸一起構(gòu)成一個容器,找到能裝最多水的那個容器。

  • 注:n>=2,且不能傾斜容器

說說題目吧,其實(shí)就是兩條豎線和x軸形成的最大的藍(lán)色矩形面積,如下圖:

我的思路一開始比較low,就是冒泡排序的思想,把所有的“矩形”全都算出來,然后再找最大的矩形面積,代碼如下:

int maxArea(int* height, int heightSize) {
    //water表示藍(lán)色的面積,H是高,W是寬(下同)
    int water = 0,H = 0,W = 0;
    for (int i = 0;i < heightSize - 1;i++){
        for (int j =  i + 1;j < heightSize;j++) {
        H = height[i] > height[j] ? height[j] : height[i];
        W = j - i;
        if (H * W > water) water = H * W;
        }
    }
    return water;
}

這個從理論上來說沒什么問題,當(dāng)效率太低,執(zhí)行的時候超時。。。只能換個思路,從兩邊到中間(代碼更能解釋思路),如下圖:


實(shí)現(xiàn)代碼:

int maxArea(int* height, int heightSize) {
    int water = 0,H = 0,W = 0,i = 0,j = heightSize - 1;
    while (i < j) {
        H = height[i] > height[j] ?  height[j] : height[i];
        W = j - i;
        water = H * W > water ?  H * W : water;
        //這句注釋代碼是我特意寫在這里的,如果加了這句printf代碼,這個算法依舊會超時,這是需要注意的,如果想看輸出,建議使用getchar函數(shù)
        //printf("i=%d,j=%d,H=%d,W=%d,water=%d\n",i,j,H,W,water);
        //不斷的向右移,找出比H高的豎線停止移動
        while (i < j && height[i] <= H) i++;
        //不斷的向左移,找出比H高的豎線停止移動
        while (i < j && height[j] <= H) j--;
    }
    return water;
}

代碼不難,主要是思路,方法也不止一種,條條大路通羅馬。。。

版權(quán)聲明:本文為 Crazy Steven 原創(chuàng)出品,歡迎轉(zhuǎn)載,轉(zhuǎn)載時請注明出處!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,063評論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,728評論 18 399
  • 今天晚上帶小麥子到碧桂園去玩了,那里有一個大滑還有一些別的健身器材,環(huán)境也比較好。還有一個大沙坑,上面有兩個秋千。...
    孫追光閱讀 318評論 0 0
  • 夏天我拒絕戀愛也拒絕穿過草叢與花朵茂密的空氣彌漫讓人心生煩躁。夏天我不想和你擁抱你就像太陽只是這陽光讓我睜不開眼我...
    陳木戈閱讀 236評論 0 0
  • 工作剛剛一年,作為職場新人的小明,在職場,可謂四處碰壁。并不是小明的工作積極性不高,可是,上司交代他的任務(wù),總是虎...
    3組助教閱讀 569評論 2 12

友情鏈接更多精彩內(nèi)容