zoukankan      html  css  js  c++  java
  • 383. 装最多水的容器

    给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。

     注意事项

    容器不可倾斜。

    样例

    给出[1,3,2], 最大的储水面积是2.

    看题看了半天,又看了下英文版才看懂

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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.

    拿样例来说,就是(1, 1), (2, 3), (3, 2) 这三个点与其对应(i, 0)点连成的线。

    思路我们可以先想到暴力,所有线两两组合求面积,再选最大的。

    但是我们可以注意到,面积取决于

    1、两条线中较短的那条

    2、两条线之间的距离

    第二个比较好解决,我们可以从大到小(两边向内)遍历。

    但第一个的话,我们的思路是找到一个大的,再使第二个也尽量大。

    如果left>right, 那么我们可以变动right看能不能找到更大的right,否则变动left

    计算出来如果比上一个大就替换掉,否则保留

     1 int maxArea(vector<int> &heights) {
     2         // write your code here
     3         int left=0;
     4         int right=heights.size()-1;
     5         int area=0;
     6         while(left<right){
     7             area=max(area,min(heights[left], heights[right])*(right-left));
     8             if(heights[left] > heights[right]){
     9                 right--;
    10             }
    11             else{
    12                 left++;
    13             }
    14         }
    15         return area;
    16     }
  • 相关阅读:
    svn cleanup failed–previous operation has not finished 解决方法
    开源SNS社区系统推荐
    从网络获取图片本地保存
    MS SQL Server 数据库连接字符串
    KeepAlive
    Configure Git in debian
    sqlserver query time
    RPi Text to Speech (Speech Synthesis)
    SQL Joins with C# LINQ
    search or reseed identity columns in sqlserver 2008
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8115548.html
Copyright © 2011-2022 走看看