码迷,mamicode.com
首页 > 其他好文 > 详细

Container With Most Water

时间:2016-02-24 22:41:01      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

一开始暴力解决,时间没通过

 1 class Solution {
 2 public:
 3     int maxArea(vector<int>& height) {
 4         int maxArea=0,eachArea=0;
 5         if(height.size()<2) return maxArea;
 6         for(int i=0;i<height.size();i++)
 7            for(int j=i+1;j<height.size();j++)
 8            {
 9              eachArea=(height[i]>height[j]?height[j]:height[i])*(j-i) ;
10              if(eachArea>maxArea) maxArea=eachArea;
11            }
12         return maxArea;
13     }
14 };

后来再去看大神的讲解,发现这个问题原理超简单:

     所谓容器就可看作是一个矩形框,我们先把整数容量作为一边边长,两头最短的高作为另一边边长,这时得到一个矩形面积。后面要找到比这个面积更大,此时矩形的一边缩小,那么只有另一边的边长变大,整体面积才有可能变大。所以,当容器由两头向中间缩小时,得找比两头最短边还长的试试。这样最后时间复杂度也就为O(n)

以下是代码:

 1 class Solution {
 2 public:
 3     int maxArea(vector<int>& height) {
 4     int water=0,h;
 5     int i=0,j=height.size()-1;
 6     while(i<j)
 7     {
 8         h=min(height[i],height[j]);
 9         if(water<h*(j-i))water=h*(j-i);
10         while(height[i]<=h && i<j)i++;
11         while(height[j]<=h && i<j)j--;
12     }
13     return water;
14     }
15     
16 };

 

Container With Most Water

标签:

原文地址:http://www.cnblogs.com/daocaorenblog/p/5215324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!