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     }
  • 相关阅读:
    SQL 两张结构一样的表合并查询 .
    如何引用传递String Boolean 等,并改变他们的值
    SQL数据库还原时备份集中的数据库备份与现有的数据库不同的解决办法
    sqlserver查询指定树形结构的所有子节点
    TortoiseSVN 合并操作简明教程
    svn的merge使用例子
    svn merge部分的详细说明
    SVN使用方法总结
    spring中的aware接口
    spring是怎样面向接口编程的?
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8115548.html
Copyright © 2011-2022 走看看