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;
}