leetcode_11_盛水最多的容器(JavaScript)

喜你入骨 提交于 2019-11-27 07:25:29

leetcode —— 11 : 盛水最多的容器

leetcode原题


题目要求

在这里插入图片描述

题解思路

官方双指针法题解思路
参考官方双指针法:

  1. 容器的容积为bottom*height
  2. height为最小的边长
  3. 相对于边长的大小来说,底部的长度bottom的变化很小,看作不变
  4. 初始时以首尾两个高度作为边长。
  5. 由于容积只受限于较短边长,依数组元素顺序循环将较短变长替换。

最初我们考虑由最外围两条线段构成的区域。现在,为了使面积最大化,我们需要考虑更长的两条线段之间的区域。如果我们试图将指向较长线段的指针向内侧移动,矩形区域的面积将受限于较短的线段而不会获得任何增加。但是,在同样的条件下,移动指向较短线段的指针尽管造成了矩形宽度的减小,但却可能会有助于面积的增大。因为移动较短线段的指针会得到一条相对较长的线段,这可以克服由宽度减小而引起的面积减小。


实现代码

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {

        let head = 0,
            tail = height.length-1,
            altitude = 0,
            bottom = 0,
            capacity = 0;
    
        let result = 0;
        for(;head!==tail;height[head]>height[tail]?tail--:head++){

            altitude = Math.min(height[head], height[tail]);
            bottom = tail - head;
            capacity = altitude * bottom;

            result = Math.max(result,capacity);
        }

        return result;


    };

代码效率

在这里插入图片描述## 收获

  • 灵活使用Math对象提供的方法,完成简单的计算
  • 理解题目,在实际生产中可能会有哪些应用。

问题

  • 不可能将所有的算法题目都做过一遍,并且完全记住。应该如何更有效率地学习算法呢?
  • 如何总结出题目蕴含的模式,并将其应用到其他相似的题目之上?
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!