打怪升级之旅第5天

30 阅读1分钟

寻寻觅觅

11.盛最多水的容器

题目描述

给定一个长度为n的整数数组 height,有n条垂线,第i条线的两个端点是(i,0)(i,height[i]) 找出两条线 使得他们与x轴共同构成的容器可以容纳最多的水 返回容器可以储存的最大水量

示例

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

使用对撞指针

思路分析 想要更大的面积 要不就是更大的宽 索引是没有办法改变的 那么只能找到更高的桶

请看code !!!


/**
 * 
 * @param {number[]} nums 
 *  算法复杂度O(n) nums 每一项最多出现一次
 *  空间复杂度O(1)
 */
function maxArea(nums){
  let l = 0
  let r = nums.length - 1
  let ans = 0
  while(l < r){
    let width = r - l
    let height = Math.min(nums[l],nums[r])
    ans = Math.max(ans,width * height)
    if(nums[l] < nums[r]){
      l++
    }else{
      r--
    }
  }
  return  ans
}

console.time('result')
let result = maxArea([1,8,6,2,5,4,8,3,7])
console.timeEnd('result') // 0.085
console.log(result) // 49

Baybay!!!