演算法 盛最多水的容器(雙指標法)

2021-10-09 03:01:18 字數 1178 閱讀 1551

力扣(leetcode)連線 盛最多水的容器

題目:

給你 n 個非負整數 a1,a2,…,an,每個數代表座標中的乙個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

說明:你不能傾斜容器,且 n 的值至少為 2。

解體思路:

雙指標從兩邊向中間運算,比較左右兩個容器壁大小,讓一方小的主動向另外一方靠近(因容器盛水量大小受小的一方影響,如果挪動大的,加上兩壁距離-1,這樣只會讓盛水量更小),直到兩者相等(迴圈條件);

示例:

輸入:[1,

8,6,

2,5,

4,8,

3,7]

輸出:49

實現方式一:(暴力解題法,缺點時間複雜度n^2,效率較低)

public

static

intmaxarea

(int

height)

}return maxarea;

}

實現方式二:(雙指標法減少時間複雜度,存在的其他問題:既有迴圈又有判斷,用while更高效一些,減少了像i這種非必要的變數,並且無需再判斷退出條件;並且迴圈次數不夠準確,效率不高)

public

static

intmaxarea1

(int

height)

else}}

return maxarea;

}

實現方式三:(替換成while結果,減少了不必要的迴圈次數;)

public

static

intmaxarea2

(int

height)

else

}return maxarea;

}

11 盛最多水的容器(雙指標法)

container with most water 題目描述 給你 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜...

盛最多水的容器(雙指標)

今天在leetcode上刷了一道題用到了雙指標,現在把這種精妙的解法記錄下來 題目傳送門 題目的大意就是要找到乙個最大的min s i s j j i 那麼這時候我是一點思路都沒,然後題解指出了乙個雙指標的做法,我們先討論這個東西的合理性,初始情況,將i,j放到陣列的開始和結尾,此時,我們能拿到乙個...

經典面試題 盛最多水的容器(雙指標法)

例題 給你 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜容器,且 n 的值至少為 2。示例 輸入 1,8,6,2...