1. 程式人生 > 實用技巧 >Leetcode 盛最多水的容器

Leetcode 盛最多水的容器

給你 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點(i,ai) 。在座標內畫 n 條垂直線,垂直線 i的兩個端點分別為(i,ai) 和 (i, 0)。找出其中的兩條線,使得它們與x軸共同構成的容器可以容納最多的水。

說明:你不能傾斜容器,且n的值至少為 2。

題解:簡單動態規劃,底越寬越大,高越高越大。取兩個指標分別指向陣列的首和尾,比較大小,較小的一個向內移動,遍歷完之後的最大值就是結果。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int l = 0
, r = height.size()-1; int ans = 0; while(l < r){ int temp = min(height[l],height[r])*(r-l); if(temp>ans){ ans = temp; }else{ if(height[l] <= height[r]){ l++; }else{ r
--; } } } return ans; } };