題目
範例
Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49
Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
解題關鍵 1
- 不管是左邊比較高還是右邊比較高,水位的面積高度只會到達較低的那個高度,例如:
在知道這個關鍵後,我們就可以先用暴力破解法得到答案:
1 | def maxArea(height: List[int]) -> int: |
以下圖解暴力破解法的部分流程
因爲暴力破解法每次的 L 指標會跑到底(最右邊) N 次,因此時間複雜度會是 O(N^2)
可以在更好嗎? 🙂
解題關鍵 2
- 設定 L 指標爲 0,往右移動 ➡️ ;R 指標爲最右邊,往左移動 ⬅️
- 因爲題目是要找出最大的面積,每次固定較大的那方,移動較小的那方,則有機會得到更大的水位面積
- 例如當 L(1) vs R(7) 的時候,把 L ➡️ 有機會得到更大的水位面積;反之則是把 R ⬅️
1 | class Solution: |
以下圖解法的部分流程
經過雙指針從左右兩次往內包夾的優化解法後,就可以把時間複雜度降爲 O(N)
囉!
最後也感謝你的收看!🎉