LeetCode基础之双指针——11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。
示例 1

LeetCode基础之双指针——11. 盛最多水的容器_第1张图片

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49
示例 2:

输入:height = [1,1]
输出:1

思路

maxArea=两条垂线中最小的高*两条垂线之间的距离;
使用移动两者中高小的垂线,使得高变大,从而面积变大;

代码

class Solution {
    public int maxArea(int[] height) {
       int l=0,r=height.length-1;
       int area=0;
       while(l<r){
           int h=Math.min(height[l],height[r]);
           area=Math.max(area,h*(r-l));
           if(height[l]<height[r]){
               l++;
           }else{r--;}
       }
       return area;
    }
}

你可能感兴趣的:(leetcode基础篇,leetcode,容器,算法)