zoukankan      html  css  js  c++  java
  • 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 };
  • 相关阅读:
    性能测试基础篇
    Jmeter参数化
    斐波那契
    Web安全 概述
    HTTP 协议详解
    echarts 响应式布局
    vue 结合mint-ui Message box的使用方法
    vue 中使用iconfont Unicode编码线上字体图标的流程
    手机端@media的屏幕适配
    @media响应式的屏幕适配
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5215324.html
Copyright © 2011-2022 走看看