• 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;
        }
    };
  • 相关阅读:
    iframe显示高度自适应 兼容多浏览器
    Asp.Net在Global.asax中实现URL 的重写
    文件流下载 ASP.NET
    Asp.Net实现全局定时器功能
    C#中获取本机IP地址,子网掩码,网关地址
    Asp.Net缓存实例
    Google API 天气数据缓存到一个XML中
    获取服务器信息
    C# NET 中英混合字符串截断实例
    Asp.Net实现长文章分页显示功能
  • 原文地址:https://www.cnblogs.com/simplekinght/p/9572694.html
Copyright © 2020-2023  润新知