Container With Most Water

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Container With Most Water相关的知识,希望对你有一定的参考价值。

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

 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的主要内容,如果未能解决你的问题,请参考以下文章

11 Container With Most Water

LeetCode11-Container With Most Water

LeetCode11. Container With Most Water 解题报告

Container with most water

Container With Most Water

Container With Most Water