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     }
  • 相关阅读:
    SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)
    麦咖啡导致电脑不能上网
    SharePoint 2013 Central Admin 不能打开
    SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)
    SharePoint 2013 APP 开发示例 系列
    synthesize(合成) keyword in IOS
    Git Cmd
    简单的正则匹配
    Dropbox
    SQL Server Replication
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8115548.html
Copyright © 2011-2022 走看看