11. 盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
Categories:
题意:
给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。
找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
**说明:**你不能倾斜容器。
难度:
中等
示例:
解析:
流程如上, 核心算法是 贪心
配合双指针找到最大面积并不断更新
贪心的判断是较大的长度为边界, 不断迭代小的边界来贪心寻找最大面积
最后返回
class Solution {
public int maxArea(int[] height) {
//初始化指针
int left = 0;
int right = height.length - 1;
//面积
int maxSize = 0;
while(left < right){
maxSize = Math.max(maxSize, Math.min(height[left], height[right]) * (right - left));
// 移动指针
if (height[left] <= height[right]) {
left++; // 增大左边的指针
} else {
right--; // 减小右边的指针
}
}
return maxSize;
}
}