题目

给定n个非负整数a 1a 2,...,a n,其中每个代表坐标(ia i)处的一个点。绘制n条垂直线,使得线i的两个端点处于(ia i)和(i,0)处。找到两条线,它们与x轴一起形成一个容器,使得容器包含最多的水。

注意:你可能不倾斜容器,n至少为2。

实现:

先看我的实现代码:

class Solution {
public int maxArea(int[] height) {
int area = 0;
for(int i=0; i<height.length-1; i++){
for(int j=i+1; j<height.length; j++){
area = Math.max(area, Math.min(height[i], height[j])*(j-i));
}
}
return area;
}
}

为了找出最大面积,我的实现方法做了两次循环,所以,方法虽然是对的,但是时间超限。

下面看一个乍一看不对,但是仔细理解却是对的的实现方式,leetcode讨论区的:

public int maxArea(int[] height) {
int left = 0, right = height.length - 1;
int maxArea = 0; while (left < right) {
maxArea = Math.max(maxArea, Math.min(height[left], height[right])
* (right - left));
if (height[left] < height[right])
left++;
else
right--;
} return maxArea;
}

以上这个方法只进行了一次遍历,不仔细考虑是会觉得这个方法是个错误方法,但是它却通过了,百思不得其解。

经过思考,是这样解释的:

限制这个容器容量的,除了底边长度,就是短边长度了,那么只需要每次改变短的那个边,保留长的那个边,那么上边的方法最后一定是一个会找到一个最长的边,以及其边上的边,这样实际上减少了遍历,但是理论上也找全了所有可能。

最新文章

  1. ActiveMQ_Mqtt的TCP丢包
  2. About_datebase
  3. swift 如何获取webView的内容高度
  4. Test Markdown Editor
  5. WPF 核心体系结构
  6. RSA加密解密及数字签名Java实现--转
  7. android滑动基础篇 - 触屏显示信息
  8. 《java入门第一季》之面向对象(继承)
  9. Trie树详解(转)
  10. SpringBoot+Shiro+Redis共享Session入门小栗子
  11. Phoenix系列:二级索引(2)
  12. nginx实现nginx/tomcat负载均衡
  13. vscode 右击文件||文件夹添加快捷方式
  14. 剑指offer编程题Java实现——面试题3二维数组中的查找
  15. golang使用etcd实现分布式锁
  16. C#中资源文件的使用
  17. 如何在NSDocumentDirectory内新建一个文件夹
  18. 程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
  19. [Usaco2005 Dec]Cleaning Shifts 清理牛棚 (DP优化/线段树)
  20. Problem B: 调用函数,求1!+2!+3!+......+10!

热门文章

  1. 万恶的a标签
  2. 第6章 AOP与全局异常处理6.1-6.4 慕课网微信小程序开发学习笔记
  3. Java核心技术36讲----------Exception和Error有什么区别
  4. 智能家居系统 Home Assistant 系列 --安装系统之Windows
  5. CentOS6升级Python2.6到3.7,错误处理[No module named &#39;_ctypes&#39;]
  6. python学习笔记:第6天 小数据池和编码转换
  7. Java学习笔记二十二:Java的方法重写
  8. Python 爬虫 七夕福利
  9. 最小化的测试套件minimal_test的使用
  10. 棋盘覆盖(我们学校自己的UOJ上的变形题)