LeetCode11.盛水最多的容器(JavaScript解法)

题目详情

题目详情

题解
思路1:暴力法
  • 把每两根垂直线之间求一次面积,取所有面积中的最大值,
  • 分析得时间复杂度为O(n^2) ,空间复杂度O(1),代码实现如下
var maxArea = function (num) {
  // 把所有的面积都算出来 取最大值
  // 
  let maxArea = 0
  for (let i = 0; i < num.length - 1; i++) {
    for (let j = i + 1; j < num.length; j++) {
      let temp = (j - i) * Math.min(num[i], num[j])
      maxArea = temp > maxArea ? temp : maxArea 
    }
  }
  return maxArea 
};
思路2:双指针法
  • 设两个指针,一个maxArea ,分别为left 和 right,所求的area= Min(height[left],height[right])* (right - left),如果要取遍所有可能,左指针和右指针势必要往中间移,直到两个指针相遇才停止,再往中间移的过程中 right - left 不断变小,如果让左指针和右指针中较大者的往中间移则 min(height[left],height[right])只有可能变得更小,那么area只会变小,则无法取到最大值,所以如果要想取最大值只能让较小者往中间移,这样min(height[left],height[right])才有可能变大,才能取边所有可能,中间不断比较记录最大值,最后返回。
  • 因为只遍历了一遍,所以时间复杂度为O(n) 没有开辟新的辅助空间空间复杂度为O(1)
var maxArea = function(height) {
    let l = 0,
        r = height.length - 1,
        maxArea = 0
    while (l < r) {
        let temp = (r - l) * Math.min(height[l], height[r])
        maxArea = temp > maxArea ? temp : maxArea
        height[l] > height[r] ? r-- : l++
    }
    return maxArea
};

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值