跳到主要内容

11.盛最多水的容器

链接:11.盛最多水的容器
难度:Medium
标签:贪心、数组、双指针
简介:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点  (i, ai) 。在坐标内画 n 条垂直线,垂直线 i  的两个端点分别为  (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与  x  轴共同构成的容器可以容纳最多的水。

题解 1 - javascript

  • 编辑时间:2020-04-12
  • 执行用时:956ms
  • 内存消耗:35.8MB
  • 编程语言:javascript
  • 解法介绍:双重循环。
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function (height) {
let res;
for (let i = 0; i < height.length; i++) {
for (let j = height.length - 1; j > i; j--) {
const area = (j - i) * Math.min(height[i], height[j]);
// console.log(`i=${i},j=${j},area=${area}`);
if (res === undefined || res < area) res = area;
}
}
return res;
};

题解 2 - typescript

  • 编辑时间:2021-05-07
  • 执行用时:96ms
  • 内存消耗:47.2MB
  • 编程语言:typescript
  • 解法介绍:双指针,向内移动。
function maxArea(height: number[]): number {
let left = 0;
let right = height.length - 1;
let ans = 0;
while (left < right) {
const rightH = height[right];
const leftH = height[left];
ans = Math.max(ans, Math.min(rightH, leftH) * (right - left));
if (rightH > leftH) left++;
else right--;
}
return ans;
}