裝最多水的容器 | Medium | LeetCode#11. Container With Most Water
題目敘述
- 題目難度:
Medium
- 題目敘述: 題目給了一個整數陣列
height
並且長度為n
,n
代表有n
條垂直的線,第i
條線的長度範圍為座標(i,0)
到(i, height[i])
(反正height
的值就會是線的長度),請找到兩條線與X軸共同形成一個容器,可以裝最多的水,請回傳可能裝的最大面積。
解法
一開始的想法
總之面積會是由比較矮的直線乘上底邊 $Area = \min(height[i], height[j]) \times (j-i)$
暴力解
1 | class Solution { |
這裡透過兩個迴圈來迭代形成不同的容器大小,但這樣做會 Time Limit Exceeded!
雙指針解
1 | class Solution { |
這邊通過兩個指標 left
, right
來包夾出容器大小,面積計算一樣,若比先前面積大,則取當前面積。而移動 left
, right
指針的關鍵在於, 如果 height[left] < height[right]
,則左邊垂直線限制了整體面積,這時如果right
保持不動並減少距離,並不會讓面積改變,因此要移動 left
,並期望找到更高的垂直線 ,反之亦然。
執行結果
複雜度
時間複雜度(暴力解): $O(n^2)$
時間複雜度(雙指標解): $O(n)$
空間複雜度: $O(1)$
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Kevin Liu's 部落格 || Technical || Travel!
評論