LeetCode刷题---11. 盛最多水的容器(双指针-对撞指针)

请添加图片描述

  • 💌 所属专栏:【LeetCode题解(持续更新中)】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的码仔,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩


前言

  大家好,又见面了,我是夜阑的狗,本文是专栏【LeetCode题解】专栏的第9篇文章,主要讲解是LeetCode11. 盛最多水的容器(双指针-对撞指针)。
  专栏地址:【LeetCode题解(持续更新中)】, 此专栏是我是夜阑的狗对LeetCode问题的讲解,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。


一、编程题:167. 两数之和 II - 输入有序数组(双指针)

1.题目描述

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

2.示例1:

在这里插入图片描述

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

3.示例2:

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

4.提示:

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

二、解题思路

这次还是老规矩练习一下双指针的思想,不枉练习这么多次双指针的题,现在双指针思路算是有一点长进了。其关键点还是该怎么去移动这两个指针?这一点要理清楚。;

1.思路

解决方法1(个人想法):

  • Step 1.创建left,right分别指向数组开头和末尾,并用maxsun存储数组中得到的最大水量;
  • Step 2.通过比较height[left]和height[right]大小来决定指针的移动,当height[left]<height[right]时,要保持大的一边不动,小的一边移动到下一个元素(left++);
  • Step 3.同理当height[left]>height[right]时,右指针移动到下一位(right–);
  • Step 4.重复Step2,3步直到遍历完整个数组就能得到最大水量;

这里Step2,3步的移动时是通过贪心思想来进行的,原理上两边需要不断的向大的高度去取,就有可能会得到其最优解。

2.复杂度分析:

时间复杂度 O(N)​: 双指针遍历一次底边宽度N​。
空间复杂度 O(1): 使用常数额外空间。


三、代码实现

。每个代码块都写了注释,方便理解,代码还可以改进;
代码如下(示例):
解法一:

class Solution {
    public int maxArea(int[] height) {
        //方法一
        int left = 0, right = height.length - 1, maxsum = 0, sum, w;
        while(left < right){
            w = right - left;
            // 两者进行比较,谁小谁先移动,直到遍历完整个数组
            if(height[left] < height[right]){
                sum = (w) * height[left++];
                maxsum = Math.max(maxsum, sum);
            }else{ 
                sum = (w) * height[right--];
                maxsum = Math.max(maxsum, sum);
            }
        }
        return maxsum;
    }
}

提交结果:
image.png


总结

以上就是今天要讲的内容,做题的时候,就是奔着双指针的思路进行解决的,联练习这么多次现在逐渐找到了点感觉。我感觉就是双指针的关键点就是在于该怎么去移动两个指针,理清这一点之后离结果也就不远了,以前不懂的时候做一题就花费一天,现在一个上午就完事了,很明显有了提示。所以就赶紧记录一下这时刻。

感谢观看,如果有帮助到你,请给题解点个赞和收藏,让更多的人看到。🌹 🌹 🌹

也欢迎你,关注我。👍 👍 👍

原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!

更多专栏订阅:



订阅更多,你们将会看到更多的优质内容!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是夜阑的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值