给定一个长度为 `n` 的整数数组 `height` 。有 `n` 条垂线,第 `i` 条线的两个端点是 `(i, 0)` 和 `(i, height[i])` 。
找出其中的两条线,使得它们与 `x` 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
**说明:** 你不能倾斜容器。
第一想法:如何确定最大面积的2个端点? 跑起来发现,[1,2,1] 直接就跪了,逻辑有问题,咋整,看答案呗
var maxArea = function(height) {
let max = 0;
let start = 0;
for (let i = 1; i < height.length; i += 1) {
const w = i - start;
const h = Math.min(height[i], height[start])
if (w * h > max) {
max = w * h
}
if (height[i] > height[start]) {
start = i
}
}
return max;
};
答案:双指针,不理解,咋就能算出最大面积? Qwen-ai: `这个算法通过“总是移动较短的那根线”的策略,系统地排除了所有不可能产生更大面积的情况。它不是随机地丢弃组合,而是基于一个严格的数学逻辑:以当前较短线为一边的所有其他组合,其面积都不可能超过当前组合。
因此,它保证能找到全局最大值,而不会有任何遗漏。`
这感觉:字都认识,思路打不开。。。。(脑子:已暂存)
var maxArea = function(height) {
let ans = 0, left = 0, right = height.length - 1;
while (left < right) {
const area = (right - left) * Math.min(height[left], height[right]);
ans = Math.max(ans, area);
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return ans;
};