寻寻觅觅
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!!!