【LeetCode力扣】11. 盛最多水的容器 (中等)

这篇具有很好参考价值的文章主要介绍了【LeetCode力扣】11. 盛最多水的容器 (中等)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide 

目录

1、题目介绍

2、解题

2.1、解题思路

 2.2、图解说明

 2.3、解题代码

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

1、题目介绍

原题链接:11. 盛最多水的容器 - 力扣(LeetCode)

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

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

示例 2:

输入:height = [1,1]
输出:1

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

2、解题

2.1、解题思路

这道题最优的方法就是用双指针,我们可以用指针left和指针right分别指向数组height[ ]的第一个数和最后一个数,然后每次经过比较两个指针指向的数值的大小来决定移动哪一个指针,我这里用两个int型变量来保存两个指针指向的值:leftNum保存left指向的值;rightNum保存right指向的值。还需要用一个int型变量max来保存最大水量。

两个指针中,哪一个指向的值小,就将那个指针向另一个指针移动一位;当两个指针指向的值相等时,移动left指针。

 根据上面的分析,可以得到以下规则:

先将max与min(leftNum, rightNum)*(right-left)进行比较

如果max小,那就让max等于min(leftNum, rightNum)*(right-left),否则max不变

然后:

(1)当leftNum大于rightNum时,right++;

(2) 当leftNum小于或者等于rightNum时,left++;

提示:min(leftNum, rightNum)的意思是,在leftNum和rightNum两个中取小的那一个数

 2.2、图解说明

 ​​​​​【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 0 ;min(leftNum, rightNum)*(right-left) = 8 

max更小,所以执行max = min(leftNum, rightNum)*(right-left);

leftNum小于rightNum,所以left++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 8 ;min(leftNum, rightNum)*(right-left) = 49 

max更小,所以执行max = min(leftNum, rightNum)*(right-left);

leftNum大于rightNum,所以right++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 49 ;min(leftNum, rightNum)*(right-left) = 18 

max更大,所以max不变

leftNum大于rightNum,所以right++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 49 ;min(leftNum, rightNum)*(right-left) = 40 

max更大,所以max不变

leftNum等于rightNum,所以left++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 49 ;min(leftNum, rightNum)*(right-left) = 24 

max更大,所以max不变

leftNum等于rightNum,所以left++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 49 ;min(leftNum, rightNum)*(right-left) =  6

max更大,所以max不变

leftNum等于rightNum,所以left++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 49 ;min(leftNum, rightNum)*(right-left) =  10

max更大,所以max不变

leftNum等于rightNum,所以left++;

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

当前max = 49 ;min(leftNum, rightNum)*(right-left) =  4

max更大,所以max不变

leftNum等于rightNum,所以left++;

到这里left就等于right了,循环到此就结束了,最后的max就等于49,然后将max返回,这道题就通过啦! 

 2.3、解题代码

class Solution {
    public int maxArea(int[] height) {
        int len = height.length;
        int left = 0;
        int right = len-1;
        int max = 0;
        while(left<right){
            int leftNum = height[left];
            int rightNum = height[right];
            int tem = Math.min(leftNum, rightNum)*(right-left);
            //这里我用了一个临时变量tem来保存Math.min(leftNum, rightNum)*(right-left)的值来方
            //便和max进行比较
            max = max < tem ? tem : max;
            if(leftNum > rightNum){
                right--;
            } else{
                left++;
            }
        }
        return max;
    }
}

 【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide

 这个方法的时间复杂是O(n)的,所以比较快

 

【LeetCode力扣】相关:

【LeetCode力扣】70. 爬楼梯 (简单)-CSDN博客https://blog.csdn.net/m0_65277261/article/details/134033485?spm=1001.2014.3001.5502【LeetCode力扣】86.分隔链表-CSDN博客https://blog.csdn.net/m0_65277261/article/details/133972240?spm=1001.2014.3001.5502【LeetCode力扣】75.颜色分类———快速排序子过程(荷兰国旗问题)-CSDN博客https://blog.csdn.net/m0_65277261/article/details/133870075?spm=1001.2014.3001.5502

【LeetCode力扣】11. 盛最多水的容器 (中等),leetcode,算法,java,ide 文章来源地址https://www.toymoban.com/news/detail-738822.html

到了这里,关于【LeetCode力扣】11. 盛最多水的容器 (中等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode_11. 盛最多水的容器

    11. 盛最多水的容器 - 力扣(LeetCode) https://leetcode.cn/problems/container-with-most-water/         这题就是典型的是一道很经典的面试题,最优的解法是双指针,但很多人在第一次看到这题的时候很难想到用双指针来解(比如我)。好了,话不多说上解法: 首先我们设两个left和righ

    2024年02月14日
    浏览(39)
  • 【力扣算法12】之 11. 盛最多水的容器 python

    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明 :你不能倾斜容器。 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂

    2024年02月16日
    浏览(49)
  • 力扣 | 11. 盛最多水的容器

    双指针解法–对撞指针

    2024年01月18日
    浏览(40)
  • 【算法】双指针——leetcode盛最多水的容器、剑指Offer57和为s的两个数字

    盛水最多的容器 (1)暴力解法   算法思路:我们枚举出所有的容器大小,取最大值即可。   容器容积的计算方式:   设两指针 i , j ,分别指向水槽板的最左端以及最右端,此时容器的宽度为 j - i 。由于容器的高度由两板中的较短的板决定,因此可得容积公式 :

    2024年02月13日
    浏览(48)
  • 力扣-盛最多水的容器

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

    2024年01月15日
    浏览(41)
  • 【算法专题--双指针算法】leecode-202. 快乐数(medium)、leecode-11. 盛最多水的容器(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年03月23日
    浏览(39)
  • 11. 盛最多水的容器

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

    2024年01月20日
    浏览(58)
  • 11. 盛最多水的容器(c++题解)

    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例 1: 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释

    2024年02月11日
    浏览(35)
  • 「优选算法刷题」:盛最多水的容器

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

    2024年01月19日
    浏览(60)
  • 【算法专题】双指针—盛最多水的容器

      分析这个题目不难得出一个 容积公式   解法一:暴力枚举(超时) 套用上述的容积公式,使用 两个for循环 来枚举出所有可能的情况,再挑出最大值即可,但是这种写法会超时,导致不通过。时间复杂度是O(n^2) 可以自己去尝试一下。  解法二:双指针  设两个指针 left,

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包