LeetCode刷题日记二(11.盛最多水的容器)

目录

盛最多水的容器

原题

提取关键信息

双指针思路

浅谈双指针

解题步骤

代码实现

总结

 


盛最多水的容器

11. 盛最多水的容器https://leetcode-cn.com/problems/container-with-most-water/

今天,小春宝给大家带来一篇经典的双指针题目,虽然leetcode的难度为中等,但其实掌握了双指针这道题并不困难

原题

提取关键信息

首先,我们从题目中得知,height是一个整形数组,这个数组的长度为heightSize,数组中的每一个元素都代表一个端点,数组元素的大小代表高度,从题目意思我们可以知道,这里的容器指的是一个矩形容器,其中一条边是两个端点之间的距离,另一条边是两个端点高度的较小值,我们需要返回最大的容量

双指针思路

浅谈双指针

双指针是数据结构中比较常用的一种经典解题方法,主要有前后指针,快慢指针,左右指针等,这道题需要的就是左右指针

解题步骤

1.首先,我们将两个指针指向数组的两端

2.其次,我们要知道容量等于两个指针指向的数据的较小值*两个指针的距离

3.一开始,指针的距离是最大的,随着指针的移动,距离不断地缩小

4.为了让容量尽可能大,我们每次应该移动那个指向数据较小的指针

代码实现

int maxArea(int* height, int heightSize){
    int* left = height;          //左指针
    int* right = height + heightSize - 1;//右指针
    int max = 0;//记录最大容器
    while (left < right)   //当两个指针相遇时停止遍历
    {
        max = fmax(max, (right - left) * fmin(*left, *right));//famx求最大值,fmin求最小值
        if (*left < *right)
        {
            left++;
        }
        else       //哪个指针小移动那个指针
        {
            right--;
        }
    }
    return max;
}

接下来我们开始分析这个算法,首先我们可以肯定的是空间复杂度是O(1),其次,不管是只移动一个指针,还是两个指针都进行移动,都只进行一次遍历,时间复杂度是O(N)。

总结

这道题虽然是中等题,但其实若是发现了可以用双指针来解决这道题将十分的轻松,当然这道题也可以使用暴力求解等其他方法,有更好的方法希望可以在评论区指出,谢谢

 

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

build小春宝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值