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