leetcode 第11题 盛最多水的容器

160 阅读1分钟

题目:给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。 题目链接

我的JavaScript解法

var maxArea = function(height) {
   let left=0, right = height.length -1;
   let max = 0
   while(left < right) {
     let currArea = Math.min(height[left], height[right]) * (right - left)
     max = Math.max(max, currArea)
     if (height[left] < height[right]) {
       left++
     } else {
       right--
     }
   }
   return max
 }
 

解析: 双指针解法,参考 的讲解,知道为什么每次循环都排除了一行或者一列

  • 时间复杂度:O(n)O(n)
  • 空间复杂度:O(1)O(1)

我的第一版是暴力破解:

var maxArea = function(height) {
  const n = height.length
  let max = 0
  for (let i = 0; i < n; i++) {
    for (let j = i+1; j < n; j++) {
      let currArea = Math.min(height[i], height[j]) * (j-i)
      max = Math.max(max, currArea)
    }
  }
  return max
};

结果正确,提交之后超时。。。。。