前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >No.011 Container With Most Water

No.011 Container With Most Water

作者头像
mukekeheart
发布2018-02-27 12:01:21
4910
发布2018-02-27 12:01:21
举报

11. Container With Most Water

  • Total Accepted: 86363
  • Total Submissions: 244589
  • Difficulty: 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.(不能倾斜容器)

思路:

  这道题很简单,大概意思是要找到两条条纵线然后这两条线以及X轴构成的容器能容纳最多的水。而任意两条线与x轴一起能装的水的最大量就是两条线在x轴的距离乘以较矮的那条线的高度即可。所以解题思路就很简单了。

方法一:

  暴力求法,求每一种情况下的最大装水面积,然后比较是否最大,不是则下一种,是则替换为当前最大值。

代码语言:javascript
复制
 1 public int maxArea2(int[] height) {
 2     int n = height.length ;
 3     if(height == null || n < 2){
 4         return 0 ;
 5     }
 6     int max = 0 ;
 7     for(int i = 0 ; i < n ; i++){
 8         for(int j = i+1 ; j < n ; j++){
 9             int low = height[i]<height[j]?height[i]:height[j] ;
10             int area = low*(j-i)/2 ;        
11             max = max>area?max:area ;
12         }
13     }
14     return max ;
15 }

方法二:

  最大盛水量取决于两边中较短的那条边,而且如果将较短的边换为更短边的话,盛水量只会变少。所以我们可以用两个头尾指针,计算出当前最大的盛水量后,将较短的边向中间移,因为我们想看看能不能把较短的边换长一点。这样一直计算到左边大于右边为止就行了。

  注意:如果将较短的边向中间移后,新的边还更短一些,其实可以跳过,减少一些计算量

代码语言:javascript
复制
 1 public int maxArea(int[] height) {
 2     
 3     int n = height.length ;
 4     if(height == null || n < 2){
 5         return 0 ;
 6     }
 7     int max = 0 ;
 8     int left = 0 ;
 9     int right = n-1 ;
10     while(left < right){
11         int low = height[left]<height[right]?height[left]:height[right] ;
12         int area = low*(right-left) ;       
13         max = max>area?max:area ;
14         if(low == height[left]){
15             left++ ;
16         }else{
17             right-- ;
18         }
19     }
20     return max ;
21 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 11. Container With Most Water
  • 思路:
  • 方法一:
  • 方法二:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档