首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 11 Container With Most Water:盛最多水容器(另解)

     編輯:關於C++

題目重述

同 ID 3189,此處提供 C# 版本與更詳細思維過程。

從暴力到雙指針

  1. 暴力雙層循環 O(N²) 超時。
  2. 雙指針 left, right 向中間收縮。
  3. 面積 = min(h[left], h[right]) * (right-left)。
  4. 移動較短線側指針:因寬度減小,唯有增高短板才可能增大面積。

C# 實現


public class Solution {
    public int MaxArea(int[] height) {
        int left = 0, right = height.Length - 1;
        int maxArea = 0;
        while (left < right) {
            maxArea = Math.Max(maxArea, Math.Min(height[left], height[right]) * (right - left));
            if (height[left] > height[right]) right--;
            else left++;
        }
        return maxArea;
    }
}

邊界證明

若 height = [10,1,2,3,4,5,6,7,11],left 指向 10,right 指向 11。短板在左,移動 left++ 不會越界。反之亦然。策略保證不遺漏最優解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved