[LeetCode解題攻略] 11. Container With Most Water

更新 發佈閱讀 4 分鐘

這篇文章將介紹 LeetCode 題目 11. Container With Most Water。這是一道經典的雙指針問題,題目要求我們找到容器可以盛最多水的情況,並幫助我們理解如何通過移動左右指針來最大化結果。


題目概述

給定一個整數數組 height,每個數字代表不同位置的垂直線高度。選擇兩條線與 x 軸組成一個容器,計算該容器能裝最多的水量。

範例:

vocus|新世代的創作平台
Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49

思路分析

這道題目要求我們找到能夠盛最多水的兩條垂直線,根據盛水的物理公式:

水量=min⁡(左邊界高度,右邊界高度)×(右邊界索引−左邊界索引)

要想得到最大水量,我們的目標是找到合適的左右邊界,使得「最小高度」與「距離」的乘積最大。

雙指針法

這道題的最佳解法是 雙指針法。我們從數組的兩端出發,逐步向內收縮指針,並在每一步計算出水量的大小。這樣可以在遍歷一次數組的情況下求得最大水量。

因為水量是由左右兩邊的最小高度決定的。假如我們移動高度較小的指針,或許能找到更高的邊界並形成更大面積;而如果移動高度較大的指針,則無法增大水量,因為水量取決於最小高度。因此,我們每次選擇移動高度較小的指針,來嘗試增加水量。

步驟

  1. 初始化左右指針,分別指向數組的兩端。
  2. 計算當前左右邊界能容納的水量,更新最大水量。
  3. 移動較小的指針,嘗試找到更高的邊界。
  4. 重複上述步驟,直到左右指針相遇。

實作 (Python)

class Solution:
def maxArea(self, height: List[int]) -> int:
left, right = 0, len(height) - 1
max_area = 0

while left < right:
# 計算當前水量
width = right - left
area = min(height[left], height[right]) * width
max_area = max(max_area, area)

# 移動較小的指針
if height[left] < height[right]:
left += 1
else:
right -= 1

return max_area

複雜度分析

  • 時間複雜度:O(n),因為我們只需要遍歷一次數組。
  • 空間複雜度:O(1),僅用了幾個指針和變數來存儲中間結果。

總結

這道題目通過雙指針法來優化查找過程,使得能夠在線性時間內找到最大水量,這個思路在解決「雙邊界最大化」問題中非常常見,值得我們學習和應用。

希望這篇教學能幫助你掌握 Container With Most Water 題目的解法!

留言
avatar-img
追極光的北極熊|軟體工程師的小天地
16會員
170內容數
歡迎來到我的部落格!這裡記錄了軟體工程師的日常生活點滴,並分享程式設計與演算法的實用教學。無論你是初學者還是有經驗的開發者,都能在這裡找到深入淺出的技術解析與實戰技巧。此外,我也會分享工作中的心路歷程與學習心得,讓你不僅學到技術,更能瞭解軟體開發的實際應用與挑戰。希望透過這個平台,能與你共同成長,激發對技術的熱情!
2025/04/04
給定一個非負整數陣列 nums,其中 nums[i] 代表你在索引 i 處最多可以向右跳幾步。 請判斷是否能夠從索引 0 跳到最後一個索引。
2025/04/04
給定一個非負整數陣列 nums,其中 nums[i] 代表你在索引 i 處最多可以向右跳幾步。 請判斷是否能夠從索引 0 跳到最後一個索引。
2025/03/28
給定一個 m x n 的矩陣 matrix,請按照 螺旋順序(spiral order) 返回矩陣中的所有元素。
2025/03/28
給定一個 m x n 的矩陣 matrix,請按照 螺旋順序(spiral order) 返回矩陣中的所有元素。
2025/03/20
這道題是 LeetCode 的經典題之一,要求我們找出 一個子陣列,使其和最大,並返回這個最大和的數值。
2025/03/20
這道題是 LeetCode 的經典題之一,要求我們找出 一個子陣列,使其和最大,並返回這個最大和的數值。
看更多
你可能也想看
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
題目會給我們一顆二元樹的根結點,要求我們找出每一層最大的節點值。
Thumbnail
這篇文章將介紹 LeetCode 題目 11. Container With Most Water。這是一道經典的雙指針問題,題目要求我們找到容器可以盛最多水的情況,並幫助我們理解如何通過移動左右指針來最大化結果。
Thumbnail
這篇文章將介紹 LeetCode 題目 11. Container With Most Water。這是一道經典的雙指針問題,題目要求我們找到容器可以盛最多水的情況,並幫助我們理解如何通過移動左右指針來最大化結果。
Thumbnail
題目會給定一個陣列,陣列裡面的元素分布就像一座山峰。 最大值的左邊都是上坡段,最大值的右邊都是下坡段。 要求我們找出陣列裡面的絕對極大值(absolute max value)所在的陣列索引
Thumbnail
題目會給定一個陣列,陣列裡面的元素分布就像一座山峰。 最大值的左邊都是上坡段,最大值的右邊都是下坡段。 要求我們找出陣列裡面的絕對極大值(absolute max value)所在的陣列索引
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
今天介紹 LeetCode 「Container With Most Water」,分享兩種解法,包括暴力法和雙指針法。透過 C++ 的逐行解讀,幫助讀者更有效地思考問題,尤其在時間複雜度方面的差異,對於學習演算法與程式設計都有所幫助。
Thumbnail
今天介紹 LeetCode 「Container With Most Water」,分享兩種解法,包括暴力法和雙指針法。透過 C++ 的逐行解讀,幫助讀者更有效地思考問題,尤其在時間複雜度方面的差異,對於學習演算法與程式設計都有所幫助。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
題目敘述 題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。 題目還額外保證,一定剛好有一組解。 測試範例 Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1]
Thumbnail
題目敘述 題目會給我們一個陣列,要求我們返回 兩數之和=target所在的陣列索引值。 題目還額外保證,一定剛好有一組解。 測試範例 Example 1: Input: nums = [2,7,11,15], target = 9 Output: [0,1]
Thumbnail
題目會給我們一個陣列,分別代表高低各不同的隔板高度,問我們從降雨之後,最多可以儲存多少水量?
Thumbnail
題目會給我們一個陣列,分別代表高低各不同的隔板高度,問我們從降雨之後,最多可以儲存多少水量?
Thumbnail
題目敘述 題目會給我們一個隔板陣列height,代表每個隔板的高度,讓我們選取兩個隔板作為水槽的邊界,請問最多我們能裝多少水? 題目的原文敘述 測試範例 Example 1: Input: height = [1,8,6,2,5,4,8,3,7] Output: 49 Explanati
Thumbnail
題目敘述 題目會給我們一個隔板陣列height,代表每個隔板的高度,讓我們選取兩個隔板作為水槽的邊界,請問最多我們能裝多少水? 題目的原文敘述 測試範例 Example 1: Input: height = [1,8,6,2,5,4,8,3,7] Output: 49 Explanati
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
題目會給定我們一個陣列,要求我們重新安排順序,把等於零的數字搬到後面。 同時必須保持原本數字的前後相對次序。
Thumbnail
題目會給定我們一個陣列,要求我們重新安排順序,把等於零的數字搬到後面。 同時必須保持原本數字的前後相對次序。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News