博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Container With Most Water -- leetcode
阅读量:6832 次
发布时间:2019-06-26

本文共 1228 字,大约阅读时间需要 4 分钟。

原题


Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.

翻译

给你一串数字a1,a2,a3...,每个数字代表坐标系上一个点,如a3 = 4的话就是代表(3,4)这个点.从这些所有的点中找出两个点,这两个点满足: 以这两个点往x轴做垂线,与x轴形成的水桶可以盛下做多的水,即面积最大.

如 (1, 2, 5) 面积为: 2; (3, 2, 4) 面积为 6

解题思路

  • 定义一个头指针(lo)指向开始,再定义一个尾指针(hi)指向数组的末尾.

  • 初始的面积是最外面两条边最小的乘他们的距离(hi-lo)*Math.min(height[hi],height[lo]);

  • 之后两个指针开始向中间移动,先计算此时的面积,如果比之前的大,面积更新为现在的面积,之后哪一个小就往中间移动哪一个.直到两个相碰,停止循环.


代码 (JavaScript)

/** * @param {number[]} height * @return {number} */var maxArea = function(height) {    let len = height.length;        if (len < 2)        return 0;        let res = 0,               lo   = 0,         /* first pointer */        hi   = len - 1;  /* last pointer  */        while (lo < hi) {        let area = (hi - lo) * Math.min(height[hi], height[lo]);        res = Math.max(res, area);                if (height[lo] < height[hi]) {            lo++;        } else {            hi--;        }       }        return res;};

转载地址:http://ejxkl.baihongyu.com/

你可能感兴趣的文章
mysql备份及恢复
查看>>
我的友情链接
查看>>
IT生涯的路很长,是否准备好?
查看>>
数据库oracle-审计管理
查看>>
Centos 7下安装Docker并采用加速器进行镜像下载加速
查看>>
第27讲 while循环体与文件读写
查看>>
我的友情链接
查看>>
NGFW终于OK了
查看>>
Vim最常用命令总结
查看>>
网络端口速率设置有讲究
查看>>
我的友情链接
查看>>
scp自动写密码脚本
查看>>
mysql如何赋权限
查看>>
去除CS0016: 未能写入输出文件错误提示
查看>>
IBM System x3250 M3 做raid1及安装系统指导
查看>>
傻瓜式的ARP处理方法
查看>>
raw格式分区.提示未格式化的数据恢复方法
查看>>
Ubuntu16.0.4.1安装lnmp
查看>>
张荣昌:博客之旅的第一天
查看>>
linux下apache+tomcat集群详细配置
查看>>