C語言雙指標之盛最多水的容器

2022-04-30 06:24:10 字數 895 閱讀 1043

題目描述

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

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

圖中垂直線代表輸入陣列 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為 49。

示例

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

]輸出:

49

題目要求

int maxarea(int* height, int

heightsize)

題解

1

int max(int a,intb)4

int min(int a,intb)7

8int maxarea(int* height, int

heightsize)else18}

19return

count;

20 }

暴力解法可以通過但是耗時o(n^2),此演算法僅耗時o(n),值得學習參考。

初始狀態是兩個指標位於首尾,此時容器的底最大。接下來執行的操作是i++或者j--,無論選擇哪個,容器底都會減小,而容器的高度取決於短邊,因此為了獲取最大的容積,需要放棄短邊,也就是說,短邊的指標需要往內移動,保留了長邊以獲得更高邊的機會可能。

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

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

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

解法1 二重迴圈,遍歷陣列,列舉出所有容器可能的容積,比較哪乙個容積最大。class solution return max 解法2 雙指標解法,一次遍歷,雙指標一頭一尾開始移動,根據題意,所指向元素小的指標每次移動乙個位置。因為容納的水量是由兩個指標指向的數字中較小值 指標之間的距離決定的。如果我...

11 盛最多水的容器 雙指標

左右指標 ans 0while l r 左右指標指向同乙個元素的時候退出迴圈 area min height l height r r l 面積 最短擋板 間距 ans max ans,area 答案只想要最大的面積 if height l height r 左擋板 小於 右擋板 l 1 左指標移動...