题目来源:https://leetcode-cn.com/problems/container-with-most-water/
大致题意:
给定一个数组,表示一组坐标,坐标值表示所在坐标位置的墙体高度,相邻墙体之间可以构成容器,求容器可以盛水的最大容量
图片来自力扣题目
思路
使用两个指针表示容器的左右边界,每次将较小的边界向内移动,移动过程中更新最大容量
为什么要将较小边界向内移动?因为木桶原理,盛水量受低边界的限制,更新较小边界,可能得到更大的容量(若新边界大于旧边界),但是更新较大边界,则一定得到更小容量
代码:
public int maxArea(int[] height) {
int n = height.length;
// 左右边界指针
int leftIdx = 0;
int rightIdx = n - 1;
// 最大容量
int ans = 0;
while (leftIdx < rightIdx) {
// 更新最大容量
ans = Math.max((rightIdx - leftIdx) * Math.min(height[leftIdx], height[rightIdx]), ans);
// 较小边界向内移动
if (height[leftIdx] < height[rightIdx]) {
leftIdx++;
} else {
rightIdx--;
}
}
return ans;
}