• 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 };
  • 相关阅读:
    实验0 了解和熟悉操作系统
    学习进度条
    0302软件构建与教学
    评论任务
    学习进度条
    sprint3个人总结
    软件工程学期总结
    6.3 学术诚信与职业道德
    阅读《构建之法》第8、9、10章
    nodejs学习心得
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5215324.html
Copyright © 2020-2023  润新知