LeetCode第[11]题(Java):Container With Most Water 标签:Array
题目难度:Medium
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.
翻译:
给定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的更多相关文章
- LeetCode第[42]题(Java):Trapping Rain Water (数组方块盛水)——HARD
题目:接雨水 难度:hard 题目内容: Given n non-negative integers representing an elevation map where the width of ...
- LeetCode第[11]题(Java):Container With Most Water (数组容器盛水)——Medium
题目难度:Medium Given n non-negative integers a1, a2, ..., an, where each represents a point at coordina ...
- 【LeetCode每天一题】Container With Most Water(容器中最多的水)
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...
- LeetCode第[5]题(Java):Longest Palindromic Substring 标签:String、动态规划
题目中文:求最长回文子串 题目难度:Medium 题目内容: Given a string s, find the longest palindromic substring in s. You ma ...
- 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 ...
- LeetCode第[33]题(Java):Search in Rotated Sorted Array
题目:在翻转有序中搜索 难度:Medium 题目内容: Suppose an array sorted in ascending order is rotated at some pivot unkn ...
- 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 + ...
- 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 ...
- LeetCode第[46]题(Java):Permutations(求所有全排列) 含扩展——第[47]题Permutations 2
题目:求所有全排列 难度:Medium 题目内容: Given a collection of distinct integers, return all possible permutations. ...
随机推荐
- JS排序
冒泡排序 https://sort.hust.cc/1.bubbleSort.html 选择排序 https://sort.hust.cc/2.selectionSort.html 插入排序 http ...
- EL表达式的简单实用
EL表达式 EL(Expression Language) 是为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方 ...
- 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework
8.9 关于并行的定义我之前写过一篇文章,参考: 并发与并行的区别 The differences between Concurrency and Parallel +---------------- ...
- HTML页面中JavaScript能获取到的各种屏幕大小信息
在HTML页面中,通过JavaScript代码访问 window 对象,能够获取到很多表征屏幕大小的信息,下面列举并加以区分. window 对象中的屏幕信息 window.innerheight. ...
- webpack加载多级依赖时css、html文件不能正确resolve的问题
在使用webpack+avalon以及avalon的mmRouter做SPA的时候,碰到一个困扰数周的问题:webpack加载多级依赖时出现了css文件和模板(html)文件不能正确resolve.原 ...
- 【python】字符串
>>> str1="welcom to China">>> str1[2:4]'lc'>>> str1[7]'t'>&g ...
- 前端模块化:RequireJS(转)
前言 前端模块化能解决什么问题? 模块的版本管理 提高可维护性 -- 通过模块化,可以让每个文件职责单一,非常有利于代码的维护 按需加载 -- 提高显示效率 更好的依赖处理 -- 传统的开发模式,如果 ...
- iOS cocos2d游戏引擎的了解之一
ios游戏引擎之Cocos2d(一) cocos2d是一个免费开源的ios游戏开发引擎,并且完全采用object-c进行编写,这对于已经用惯object-c进行ios应用开发的童鞋来说非常容易上手.这 ...
- bzoj 3242: [Noi2013]快餐店
Description 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城 ...
- fdisk 命令详解
fdisk 作用: 查看磁盘实体使用情况,也可对硬盘分区. 选项: -b 分区大小 -l 列出指定的外围设备的分区表状况 -s 分区编号, 将指定的分区大小输出到标准输出上, 单位为区块 -u ...