1. 程式人生 > >[leetcode] 11.盛最多水的容器

[leetcode] 11.盛最多水的容器

scrip alt 分享 containe 可能性 其中 .com 大於 leetcode

盛最多水的容器

題意好繞,看半天都沒懂要幹什麽。
我直接上個圖可能就能一眼看明白了:
技術分享圖片

總之,當明白題意後,直接就能想到暴力法枚舉所有可能性,不過如果再畫一下圖基本就能發現:兩線段之間形成的區域總是會受到其中較短那條長度的限制。
我舉個例子,對於所有以(1,a1)為左邊構成的矩陣,最大的一個肯定在右邊(n,an)開始數,第一個大於等於ai的邊,我們記成aj。即以a1為左邊的最大矩陣肯定是 以right邊從(j,aj)~(n,an)構成矩陣中的其中一個。實際上,對於(1,a1)~(j,aj)的邊,我們就沒有必要去算了。然後,以(2,a2)為左邊,此時註意,如果a2小於等於a1,那麽不必算了。如果a2>a1,那麽此時與a1同理。依次類推。。(我想到的這個思路感覺好繞- -)

官方給出的雙指針法好像更清晰易懂一些,貪心思想:

最初我們考慮由最外圍兩條線段構成的區域。現在,為了使面積最大化,我們需要考慮更長的兩條線段之間的區域。如果我們試圖將指向較長線段的指針向內側移動,矩形區域的面積將受限於較短的線段而不會獲得任何增加。但是,在同樣的條件下,移動指向較短線段的指針盡管造成了矩形寬度的減小,但卻可能會有助於面積的增大。因為移動較短線段的指針會得到一條相對較長的線段,這可以克服由寬度減小而引起的面積減小。

題不錯,其實還比較考驗智商的,打算把他選為面試題

代碼不貼了

[leetcode] 11.盛最多水的容器