力扣刷题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. 这提醒自己最近需要整理总结一下 解题方法。

勉励自己:贵在坚持!

浅浅发疯

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

相关推荐

  1. 面试经典---11.容器

    2024-03-31 21:32:01       31 阅读
  2. 题库第5容器

    2024-03-31 21:32:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-31 21:32:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-31 21:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-31 21:32:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-31 21:32:01       20 阅读

热门阅读

  1. 抽象工厂模式

    2024-03-31 21:32:01       20 阅读
  2. 导航定位会跳变,记录里程计数据异常问题

    2024-03-31 21:32:01       20 阅读
  3. pytest中文使用文档----6临时目录和文件

    2024-03-31 21:32:01       17 阅读
  4. TextBlock 的run元素

    2024-03-31 21:32:01       18 阅读
  5. 探索前端开发中的路径:./、../、@/ 等详解

    2024-03-31 21:32:01       15 阅读
  6. 生产环境数据处理单sql编写

    2024-03-31 21:32:01       18 阅读
  7. Dockerfile中DSL语法

    2024-03-31 21:32:01       16 阅读