LeetCode第[11]题(Java):Container With Most Water (数组容器盛水)——Medium
题目难度: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 (数组容器盛水)——Medium的更多相关文章
- 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 标签:Array
题目难度: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第[2]题(Java):Add Two Numbers (链表相加)——Medium
题目难度:Medium 题目: You are given two non-empty linked lists representing two non-negative integers. The ...
- 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. ...
- LeetCode第[1]题(Java):Two Sum (俩数和为目标数的下标)——EASY
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- [LeetCode每日一题]88. 合并两个有序数组
[LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...
随机推荐
- java反射——构造方法
大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...
- 使用synergyc共享键鼠
通常情况下我们经常同时操作两台或者多台电脑, 这样就会存在多个键盘鼠标来回切换的问题. 那么我们主要的目标就是怎么在多个电脑上共享一套键盘鼠标,而且可以轻松的来回切换呢. 网上有很多的解决方案,这里我 ...
- c# Log4net的结构
log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).
- 关于this,作用域,属性,原型链的一个小练习
function p () { this.name = 'x'; var name = 'y'; this.getName = function () { return name; } } // 求值 ...
- 克隆DOM元素 ele.cloneNode();
var nodePrev = p.children[j].cloneNode(true); var nodeNext = p.children[j + 1].cloneNode(true);
- 洛谷P4475 巧克力王国
洛谷P4475 巧克力王国 题目描述 巧克力王国里的巧克力都是由牛奶和可可做成的. 但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力. 对于每一块巧克力,我们设 x 和 y 为 ...
- Python WSGI v1.0 中文版(转)
add by zhj: WSGI全称Web Server Gateway Interface,即Web网关接口.其实它并不是OSI七层协议中的协议,它就是一个接口而已,即函数,而WSGI规定了该接口的 ...
- 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法
错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/a ...
- Angular学习笔记—HttpClient (转载)
HttpClientModule 应用 导入新的 HTTP Module import {HttpClientModule} from '@angular/common/http'; @NgModul ...
- ado.net(增删改)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...