【leetCode】盛最多水的容器

问题描述

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

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

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

说明:你不能倾斜容器。

 

解题思路

1. 容纳的水量=两边中最低的高度 * 两边的长度

2. 移动两边中低的一端才会改变容量。而长的那边移动不会改变容量,对应的组合可以被剪枝

解题误区

1. 容器的两边必须比中间高

从示例看,其实中间出现更高的情况并不会阻断蓄水。

由于这个误区使得问题复杂化,需要同时权衡高度和长度

 

JAVA代码

class Solution {
    public int maxArea(int[] height) {
        int left = 0;
        int right = height.length - 1;
        int maxWater = 0;
        while(left < right){
            maxWater = Math.max(maxWater, Math.min(height[left], height[right]) * (right - left));
            if(height[left] < height[right]){
                left++;
            }else{
                right--;
            }
        }
        return maxWater;
    }
}
View Code

 

 

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/container-with-most-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2022-06-17 23:30  huapyuan  阅读(51)  评论(0编辑  收藏  举报