Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[LeetCode] 11.盛最多水的容器 #11

Open
MagicalBridge opened this issue Aug 5, 2019 · 0 comments
Open

[LeetCode] 11.盛最多水的容器 #11

MagicalBridge opened this issue Aug 5, 2019 · 0 comments

Comments

@MagicalBridge
Copy link
Owner

MagicalBridge commented Aug 5, 2019

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为
(i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

示例:

输入: [1,8,6,2,5,4,8,3,7]
输出: 49

分析:
本题是一道经典的双指针题目。

[1, 8, 6, 2, 5, 4, 8, 3, 7]
 ^                       ^

在初始时候,左右指针分别指向数组的左右两端,它们可以容纳的水量为 min(1, 7) * 8 = 8.

这个时候我们需要移动一个指针,移动哪一个呢?直觉告诉我们,应该移动数字较小的那个(就是我们所说的左指针)。这是因为,容纳水量是由

两个指针指向的数字中的较小值 * 指针之间的距离

决定的,如果我们移动数字较大的指针,那么前者「两个指针指向的数字中的较小值」不会增加,后者「指针之间的距离」会减小,那么这个乘积会减小,因此,我们移动数字较大的那个指针是不合理的。因此,我们移动 数字较小的那个指针

�思路:
这里需要定义两个指针分别指向数组的左右两端,然后两个指针向中间搜索,每移动一次算一次值和结果比较取较大的,容器装水量的算法是找出左右两个边缘中较小的那个乘以两边的距离。

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function (height) {
  let res = 0, i = 0, j = height.length - 1;
  while (i < j) {
    res = Math.max(res, Math.min(height[i], height[j]) * (j - i))
    if (height[i] < height[j]) {
      i++
    } else {
      j--
    }
  }
  return res
}

复杂度分析

  • 时间复杂度:O(N),双指针总计最多遍历整个数组一次。
  • 空间复杂度:O(1),只需要额外的常数级别的空间。
@MagicalBridge MagicalBridge changed the title [LeetCode] 11.Container With Most Water 盛最多水的容器 #4 [LeetCode] 11.Container With Most Water 盛最多水的容器 #11 Aug 5, 2019
@MagicalBridge MagicalBridge changed the title [LeetCode] 11.Container With Most Water 盛最多水的容器 #11 [LeetCode] 11.盛最多水的容器 Jan 17, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant