Container With Most Water

哎,最近心情烦躁,想在leetcode找找感觉,就看到了这题。

然而,看了题目半天,硬是没看懂,于是乎就百度了下,怕看到解题方法,就略看了下摘要,以为懂了,万万没想到,居然把题目意思理解错了,所以还是要好好学英语呀。

然而,在理解对了之后,又是time limit excess,又瞟了下博客讲解,也算是徒手码了出来,记录一发,随便再体会下....

题目相关

题目在这,Container With Most Water

大概意思就是,给出的各点作x轴垂线,与x轴组成一个Container,然后找出两条线,使得其能储存最大容量的水,哎,其实仔细看题目,人家表述的很清楚呀,好好学英语呀...

思路一

正确理解题目了之后,按照我等弱鸡智商当然是第一反应是遍历了,很简单,两边两块板,容量为:

min*(j-i)

选取一边作为基准,遍历其后面的所有边,与之形成容器,得到各个容量。

两个循环就行...

好久没用js了,就熟悉下。

Algorithm = {};

Algorithm.private = {};

Algorithm.private.GetArea = function (height, i, j) {
var min = 0;
if (height[i] > height[j]) {
min = height[j];
} else {
min = height[i];
}
return min * (j - i);
} Algorithm.ContainerWater = function (height) { var maxArea = 0;
for (var i = 0; i < height.length; i++) {
for (var j = i; j < height.length; j++) {
var t = Algorithm.private.GetArea(height, i, j)
if (maxArea < t) {
maxArea = t;
}
}
}
return maxArea;
}

毫无疑问,时间超时,不过好歹也能工作吧.....

思路二

看了下别人的思路,原来,还可以这样

最终找到了两条线应该具备以下两个性质

  • 左边的线的左边不会有比其更长的线
  • 右边的线的右边不会有比其更长的线

其实很好理解,如果所找到的结果不满足这两条性质,那这结果必然不是最优的,也即是说,上面两点是必要条件,由此,得到以下代码...

Algorithm.ContainerWaterOpt = function (height) {

    var a = [], b = [], amax = 0, bmax = 0, maxArea = 0;
for (var i = 0; i < height.length; i++) {
if (amax < height[i]) {
amax = height[i];
a.push(i);
}
if (bmax < height[height.length - i - 1]) {
bmax = height[height.length - i - 1];
b.push(height.length - i - 1);
}
} for (var i = 0; i < a.length; i++) {
for (var j = 0; j < b.length; j++) {
var t = Algorithm.private.GetArea(height, a[i], b[j]);
if (maxArea < t) {
maxArea = t;
}
}
} return maxArea;
}

后记

哎,以后做题时,还是好好思考题目本身里面的内涵,不一定非要从数据结构等来思考...

最最重要的,好好学英语呀!

关于Container With Most Water的求解的更多相关文章

  1. 如何装最多的水? — leetcode 11. Container With Most Water

    炎炎夏日,还是呆在空调房里切切题吧. Container With Most Water,题意其实有点噱头,简化下就是,给一个数组,恩,就叫 height 吧,从中任选两项 i 和 j(i <= ...

  2. Container With Most Water - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Container With Most Water - LeetCode 注意点 没什么好注意的... 解法 解法一:暴力求解,假设任意两个端点会是最佳答 ...

  3. [LintCode] Container With Most Water 装最多水的容器

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  4. 67. Container With Most Water

    Container With Most Water Given n non-negative integers a1, a2, ..., an, where each represents a poi ...

  5. LeetCode:Container With Most Water,Trapping Rain Water

    Container With Most Water 题目链接 Given n non-negative integers a1, a2, ..., an, where each represents ...

  6. No.011 Container With Most Water

    11. Container With Most Water Total Accepted: 86363 Total Submissions: 244589 Difficulty: Medium Giv ...

  7. leetcode面试准备:Container With Most Water

    leetcode面试准备:Container With Most Water 1 题目 Given n non-negative integers a1, a2, ..., an, where eac ...

  8. [leecode]---11.container with most water

    description: Input: [1,8,6,2,5,4,8,3,7]Output: 49 思路1: 从(1,a1)开始向后算面积,需要两层n循环,时间复杂度n2 思路2: 找出数组中最大的数 ...

  9. Leetcode11 Container With Most Water 解题思路 (Python)

    今天开始第一天记录刷题,本人编程小白,如果有写的不对.或者能更完善的地方请个位批评指正! 准备按tag刷,第一个tag是array: 这个是array的第一道题:11. Container With ...

随机推荐

  1. w5cValidator【AngularJS】 2.0 版本发布

    w5cValidator 插件基于angular原有的表单验证,在原有的基础上扩展了一些错误提示的功能,让大家不用在每个表单上写一些提示信息的模板,专心的去实现业务逻辑. 代码地址:https://g ...

  2. Visual Studio 自定义项目或工程模板

    如何利用 Visual Studio 自定义项目或工程模板 在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志 ...

  3. 配置Sublime Text 2 的Python运行环境

    Sublime Text 2作为一款轻量级的编辑器,特点鲜明,方便使用,愈发受到普罗大众的喜爱,我个人最近也开始用了起来.同时,我近段时间还在学习Python的相关东西,所以开始用ST2来写Pytho ...

  4. Visual Studio 20**自动添加头部注释信息

    关于Visual Studio 20**自动添加头部注释信息   作为一个万年潜水党,不关这一篇文章技术含量如何,也算是一个好的开始吧.   在日常的开发中我们经常需要为类库添加注释和版权等信息,这样 ...

  5. Binder机制,从Java到C (5. IBinder对象传递形式)

    1.IBinder的传递 Binder IPC通信中,Binder是通信的媒介,Parcel是通信的內容.远程调用过程中,其参数都被打包成Parcel的形式來传递.IBinder对象当然也不例外,在前 ...

  6. 浅谈DevExpress<二>:设计一个完整界面(1)

    昨天谈了界面的换肤问题,今天拿一个简单的界面来介绍一下怎么设计一个五脏俱全的界面,总体效果如下图(种类的图片随便找的^^):

  7. sprinfmvc学习--01

    springmvc框架是一个基于请求驱动的web框架,使用了前端控制器模式来设计.根据请求映射规则分发给相应的页面控制器进行处理. 1.  首先用户发送请求-->DispatcherServle ...

  8. Twitter算法

    算法实践——Twitter算法面试题(积水问题)的线性时间解法   问题描述:在下图里我们有不同高度的挡板.这个图片由一个整数数组所代表,数组中每个数是墙的高度.下图可以表示为数组(2.5.1.2.3 ...

  9. (转)js网址验证

    这个url的正则表达式判断的js!是比较全面的.它验证的情况包括!IP,域名(domain),ftp,二级域名,域名中的文件,域名加上端口!是我见过的最全面的url验证了!可能还有遗漏的! <s ...

  10. GetWindowRect和GetClientRect的区别详解

    一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClientRect这两个函数,是获取逻辑坐标系中窗口或控件(其实也是窗口)大小和坐标的常用函数了,有什么不一样的? ...