• 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;
        }
    };
  • 相关阅读:
    python scrapy爬取前程无忧招聘信息
    scrf 原理及flask-wtf防护
    Django 惰性机制
    Django 中配置MySQL数据库
    Django的安装命令
    python装饰器
    python面向对象之继承
    OSI七层模型
    面向对象
    python函数
  • 原文地址:https://www.cnblogs.com/simplekinght/p/9572694.html
Copyright © 2020-2023  润新知