zoukankan      html  css  js  c++  java
  • leetcode 11. 盛最多水的容器

    题目:

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

    说明:你不能倾斜容器,且 n 的值至少为 2

    图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

    示例:

    输入: [1,8,6,2,5,4,8,3,7]
    输出: 49

    思路:

      双指针

      我们知道,面积是等于高度乘以宽度,当宽度一定时,高度是由较短的一边来决定的,如果我们想去使面积增加,只有去往里移动较短的板,面积才有可能增加,因为如果移动较长的板,此时的高度可能还是由较短的一段决定,而移动较短的板,下一个板可能会变长,进而使面积增加。

      所以,我们在数组的中使用两个指针,一个放到开头,一个放到末尾,上诉算法移动指针,不断地去更新最大面积

    代码:

    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int n = height.size();
            
            int l = 0;
            int r = n-1;
            int ans = -1;
            while(l<r)
            {
                int a = height[l];
                int b = height[r];
                int tmp = min(a,b)*(r-l);
                if(tmp>ans) ans = tmp;
                if(a<b) l++;
                else r--;
            }
            
            return ans;
        }
    };
  • 相关阅读:
    读取库中的所有表名
    ADOX学习
    自己寫的AccessDBHelper
    C#中Split用法~
    SQL Server:查看SQL日志文件大小SQL脚本
    MS SQL2005 How to find the top 50 cpu execution time.
    跨浏览器的本地存储解决方案
    這個SQL 語句你真的看明白了嗎?
    一个简单的SQL最优写法讨论(1)
    Gmail的标签容纳的邮件数量有限制。
  • 原文地址:https://www.cnblogs.com/simplekinght/p/9572694.html
Copyright © 2011-2022 走看看