题目难度:Medium

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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.

翻译:

给定n个非负整数a1 a2....an,每个代表一个坐标点(i,ai)。

n垂直的线是这样画的:直线i的两个端点为(i,ai)和(i,0),两条竖线和x轴形成一个容器,找到使容器包含最多的水的两条,返回水的体积。

注意:不能倾斜容器,n至少是2。

思路:遍历每一种可能的体积,与一个temp值相比较,比temp大则temp等于这个体积

思路一Code:48 / 49 test cases passed. ——  Time Limit Exceeded            时间复杂度O(N2)

     public int maxArea(int[] height) {
int result = 0;
for (int i = 0; i < height.length; i++) {
for (int j = i + 1; j < height.length;j++) {
int area = getMin(height[i], height[j]) * (j - i);
if (area > result) {
result = area;
}
}
}
return result;
}
private int getMin(int a, int b) {
return a>b?b:a;
}

我承认这种方法是蠢了点,但是貌似没毛病啊,怎么会超时?

点开detail一看49的测试用例。。。。

[15000,14999,14998,14997,........[此处省略n万个数字]........,6004,6003,6002,600... 28895 more chars

emmm……

我去你妹妹的吻。。。

带着去瞻仰的心情点开了solution……

我那个区,我咋就没想到!。。。

答案思路:从两边的“木板”向中间同时移动,取两条木板面积,与一个temp值相比较,比temp大则temp等于这个体积

【精髓在于:假设已知一木板X已经比对面的木板Y要长,那么根据短板效应(底面积不变大时,容器盛水容量取决于短板长度),不管怎么继续往前移动(缩小底面积)此X木板,得到的结果也不会比刚才X与Y组合的结果更大。

因此,从两边取两条“木板”时,只需要移动相对短的直线的那一边的指针即可达到寻找最大面积的效果】

Code:49测试用例—9ms(beats 69.61%)     时间复杂度:O(N)

 public static int maxArea2(int[] height) {
int maxarea = 0, l = 0, r = height.length - 1;
while (l < r) {
maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
if (height[l] < height[r])
l++;
else
r--;
}
return maxarea;
}

总结:面对求最大(小)面积、体积这种题,应该要考虑刷选遍历可能结果,即某些相对更小(大)的可能结果已经确定小于(大于)在已经遍历过的结果里了(利用短板效应,和公共边效应等)

   例如本题中,如果进行全遍历,那么在一边木板本来就是比对面高的情况下,不管怎么继续往前移动此木板,得到的结果只会比刚才的结果更小,强行全遍历就造成了遍历冗余。

【补:求两者最大值最小值可使用Math包的方法,其实底层和我写的一样都是三目表达式(以后使用记得加括号,因为这种表达式是靠左优先),不过可以简化代码,增加可读性】

LeetCode第[11]题(Java):Container With Most Water 标签:Array的更多相关文章

  1. LeetCode第[42]题(Java):Trapping Rain Water (数组方块盛水)——HARD

    题目:接雨水 难度:hard 题目内容: Given n non-negative integers representing an elevation map where the width of ...

  2. LeetCode第[11]题(Java):Container With Most Water (数组容器盛水)——Medium

    题目难度:Medium Given n non-negative integers a1, a2, ..., an, where each represents a point at coordina ...

  3. 【LeetCode每天一题】Container With Most Water(容器中最多的水)

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

  4. LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划

    题目中文:求最长回文子串 题目难度:Medium 题目内容: Given a string s, find the longest palindromic substring in s. You ma ...

  5. LeetCode第[26]题(Java):Remove Duplicates from Sorted Array 标签:Array

    题目难度:Easy 题目: Given a sorted array, remove the duplicates in-place such that each element appear onl ...

  6. LeetCode第[33]题(Java):Search in Rotated Sorted Array

    题目:在翻转有序中搜索 难度:Medium 题目内容: Suppose an array sorted in ascending order is rotated at some pivot unkn ...

  7. LeetCode第[18]题(Java):4Sum 标签:Array

    题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...

  8. LeetCode第[1]题(Java):Two Sum 标签:Array

    题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...

  9. LeetCode第[46]题(Java):Permutations(求所有全排列) 含扩展——第[47]题Permutations 2

    题目:求所有全排列 难度:Medium 题目内容: Given a collection of distinct integers, return all possible permutations. ...

随机推荐

  1. 自学Zabbix1.2-zabbix特性

    Zabbix是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性. 概述 Zabbix是一个高度集成的网络监控套件,通过一个软件包即可提供如下特性 数据收集 可用性及性能检测 支持SNMP(t ...

  2. sqlser 2005 使用执行计划来优化你的sql

    一:sqlserver 执行计划介绍    sqlserver 执行计是在sqlser manager studio 工具中打开,是检查一条sql执行效率的工具.建议配合SET STATISTICS ...

  3. redis的pipeline操作

    1.简单描述 redis是一个CS模式的tcp的server,一个client发起了命令操作的请求,然后会阻塞等待服务端的处理和数据的返回.基本上一个命令请求就是2个报文,一去一回.如果多个命令,每次 ...

  4. 微信小程序路过

    应该算是入门篇, 从我怎么0基础然后沿着什么方向走,遇到的什么坑,如何方向解决,不过本人接触不是很多,所以也就了解有限. 小程序的前提: 1.小程序大小不允许超过2M.(也就是本地图片,大图精图不要在 ...

  5. log4go的输出优化

    又看了一些golang的日志包和相关的文章,仔细阅读了go 1.9.2系统提供的log和go-log,产生了对log4go的日志输出进行优化的想法. 结构化与multiwriter log使用mult ...

  6. 项目(1)----用户信息管理系统(5)---(剩余jsp界面)

    完成剩余jsp界面 首页界面前面我写了,接下来还有就是一个显示所有用户界面 1:注册界面 2:显示所有用户信息界面 1:注册界面 <%@ page language="java&quo ...

  7. 《程序设计实践》【PDF】下载

    <程序设计实践>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196319 内容简介 本书从排错.测试.性能.可移植性.设计.界面. ...

  8. 让intellij idea 14 支持ES6语法

    用eclipse做前端开发,用到了webpack,结果各种依赖导致软件卡的一比,简直不能动!虽然在同事的帮忙下,修改了一下配置,但仍然卡的没脾气.改用intellij idea 14解决了卡的问题,但 ...

  9. mongodb命令行基础语法

    首先是安装并配置mongodb,这个请自行百度,安装完成后打开cmd命令输入mongo.我们现在先做一个例子吧,假设有一个班级叫c1,里面有若干个人,里面的人有姓名.年龄.性别和班级,我们分别对他们进 ...

  10. [array] leetcode - 53. Maximum Subarray - Easy

    leetcode - 53. Maximum Subarray - Easy descrition Find the contiguous subarray within an array (cont ...