

LeetCode Hot 100:盛最多水的容器
用双指针讲清盛最多水的容器:每轮移动较短边,并给出可复制 JavaScript 实现。
本期讲 LeetCode Hot 100「盛最多水的容器」。这道题考察的不是找最高的两根线,而是看清面积由宽度和较短边共同决定:
area = (right - left) * Math.min(height[left], height[right])。核心思路:双指针从数组两端出发,每轮计算当前面积,然后移动较短的一边。因为宽度每次都会变小,如果只移动较高的一边,水位仍然被短板限制,面积没有变大的机会;移动短板,才可能遇到更高的边。
function maxArea(height) {
let left = 0;
let right = height.length - 1;
let ans = 0;
while (left < right) {
const h = Math.min(height[left], height[right]);
ans = Math.max(ans, h * (right - left));
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return ans;
}时间复杂度是
O(n),额外空间复杂度是 O(1)。来源
相似内容
- 登录后可发表评论。
