力扣刷题Days28-第二题-11.盛水最多的容器(js)

目录

1,题目

2,代码

3,学习与总结

3.1思路回顾

1,如何遍历

2,算法流程

3.2剖析问题


1,题目

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

说明:你不能倾斜容器。

2,代码

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
    // 题意补充说明
    // 容量 = x 轴上的距离(两条线之间的间距)× 两条线中较短一条的高度。
    // 双指针
    let st = 0,end = height.length -1;
    let areas = 0;
    while(st < end){
        const ans = Math.min(height[st],height[end])*(end - st);
        areas = Math.max(ans,areas); 
        if(height[st] <= height[end]){
            st++;
        }else{
            end--;
        }
    }
    return areas;
};

3,学习与总结

3.1思路回顾

1,如何遍历

在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽 底边宽度 −1​ 变短:

若向内 移动短板 ,水槽的短板 min(h[i],h[j])可能变大,因此下个水槽的面积 可能增大 。
若向内 移动长板 ,水槽的短板 min(h[i],h[j])不变或变小,因此下个水槽的面积 一定变小 。
因此,初始化双指针分列水槽左右两端,循环每轮将短板向内移动一格,并更新面积最大值,直到两指针相遇时跳出;即可获得最大面积。

2,算法流程

(1)双指针初始化,分别指向数组的首尾元素;

(2)循环收缩,直到start指针大于等于end指针,循环结束;

  • 更新面积最大值 resresres ;
  • 选定两板高度中的短板,向中间收窄一格;

(3)返回结果;

3.2剖析问题

  1. 双指针解题已经做过很多次,但遇到这题,自己在思考过程中依旧没有思路。
  2. 如果是双指针那阶段刷题,可能可以想到利用双指针来解题。
  3. 这提醒自己最近需要整理总结一下 解题方法。

勉励自己:贵在坚持!

浅浅发疯

刷题的伙伴们一起打卡,坚持啊!!!

  • 26
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值