数据结构和算法leetcode11.盛最多水的容器(代码片段)

数据结构和算法 数据结构和算法     2022-12-04     519

关键词:

截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666


视频分析

【数据结构和算法】LeetCode 11. 盛最多水的容器

B站视频


代码部分

1,以当前柱子为桶的高度,分别从两边查找

public int maxArea(int[] height) 
    int maxAre = 0;// 保存最大值
    int left = 0;
    int right = 0;
    int length = height.length;
    //以当前柱子为桶的左边界开始查找
    while (left < length) 
        // 从右边开始查找第一个不小于当前柱子的高度
        right = length - 1;
        while (left < right) 
            if (height[left] > height[right]) 
                right--;
             else
                break;
        

        //计算围成的面积
        int are = height[left] * (right - left);
        maxAre = Math.max(maxAre, are);
        left++;
    

    right = length - 1;
    //以当前柱子为桶的右边界开始查找
    while (right > 0) 
        // 从左边开始查找第一个不小于当前柱子的高度
        left = 0;
        while (left < right) 
            if (height[right] > height[left]) 
                left++;
             else
                break;
        

        //计算围成的面积
        int are = height[right] * (right - left);
        maxAre = Math.max(maxAre, are);
        right--;
    
    return maxAre;

2,双指针

public int maxArea(int[] height) 
    int maxAre = 0;// 保存最大值
    int left = 0;
    int right = height.length - 1;
    while (left < right) 
        maxAre = Math.max(maxAre, (right - left)
                * Math.min(height[left], height[right]));
        // 矮的柱子往中间靠
        if (height[left] < height[right])
            left++;
        else
            right--;
    
    return maxAre;

3,双指针优化

public int maxArea(int[] height) 
    int maxAre = 0;// 保存最大值
    int left = 0;
    int right = height.length - 1;
    while (left < right) 
        int minHeight = Math.min(height[left], height[right]);
        maxAre = Math.max(maxAre, (right - left) * minHeight);
        // 如果两个柱子往中间靠的时候,有更短的或一样高的,直接跳过
        while (left < right && height[left] <= minHeight)
            left++;
        while (left < right && height[right] <= minHeight)
            right--;
    
    return maxAre;

算法leetcode|11.盛最多水的容器(rust重拳出击)(代码片段)

文章目录11.盛最多水的容器:样例1:样例2:提示:原题传送门:分析题解rustgoc++javatypescriptpython11.盛最多水的容器:给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,he... 查看详情

11.盛最多水的容器(leetcode记录)

publicintmaxArea(int[]a) intmax=0; for(inti=0,j=a.length-1;i<j;) intminHeight=a[i]<a[j]?a[i++]:a[j--]; max=Math.max(max,(j-i+1)*minHeight); returnmax; 查看详情

leetcode11.盛最多水的容器(代码片段)

文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识四、加群须知一、题目1、题目描述  给定一个长度为nnn的整数数组heightheightheight。有nnn条垂线,第... 查看详情

leetcode11盛最多水的容器(代码片段)

https://leetcode-cn.com/problems/container-with-most-water/解决方案classSolutionpublicintmaxArea(int[]height)intl=0,r=height.length-1;intans=0;while(l<r)ans=Math.max(ans,(r-l)*Math.m 查看详情

11.盛最多水的容器(代码片段)

算法记录LeetCode题目:  给你n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i,ai)。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai)和(i,0)。找出其中的两条线,使得它们与x轴共同构成... 查看详情

leetcode11盛最多水的容器(代码片段)

一.问题描述给你n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i,ai)。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai)和(i,0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最... 查看详情

leetcode刷题python11.盛最多水的容器(代码片段)

1题目给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。2解析3python实现defmaxArea(se... 查看详情

leetcode刷题日记之盛最多水的容器

节后第一天,鉴于五一五天都没做过题,有点遗忘了,今天来看一道简单点的题,练下手。先看下题:给你n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai)。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai)和(i,... 查看详情

打卡算法11盛最多水的容器算法解析(代码片段)

...0c;生活感悟,觉得有用记得一键三连哦。一、题目1、算法题目“根据输入的数组数字构建坐标 查看详情

#yyds干货盘点#leetcode热题hot100:盛最多水的容器

题目:给定一个长度为n的整数数组 height 。有 n 条垂线,第i条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储... 查看详情

11.盛最多水的容器(代码片段)

1//双指针算法2classSolution34public:5intmaxArea(vector<int>&height)67intn=height.size();8intArea=0;9intl=0,r=n-1;10while(l<r)1112Area=max(Area,(r-l)*min(height[l],height[r]));13if(height[l]<height[r])l++;//木板原理,谁小谁移动14elser--;1516returnArea;1718;  查看详情

11.盛最多水的容器

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

每日一道leetcode:11.盛最多水的容器(代码片段)

1.题目(中等)题目链接给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量... 查看详情

11.盛最多水的容器(代码片段)

题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai)。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai)和(i,0)。找出其中的两条线,使得它们与 x ... 查看详情

11.盛最多水的容器(代码片段)

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

11.盛最多水的容器(代码片段)

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

11.盛最多水的容器(代码片段)

给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。... 查看详情

11.盛最多水的容器(代码片段)

11.盛最多水的容器方法一classSolution(object):defmaxArea(self,height):""":typeheight:List[int]:rtype:int"""h_len=len(height)i=0k=-1s=[]whileh_len+k-i>=1:s.append(min(height[i],height[k])*(h_len+k-i))ifheight[i]<=height[k]:i+=1else:k-=1returnmax(s)#测试用例"""输入:[1,8,6,2,5,4,8,... 查看详情