0


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

​​​​​​​

盛最多水的容器

  1. 盛最多水的容器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)。

总结

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

标签: leetcode 容器 算法

本文转载自: https://blog.csdn.net/weixin_62753802/article/details/122735337
版权归原作者 build小春宝 所有, 如有侵权,请联系我们删除。

“LeetCode刷题日记二(11.盛最多水的容器)”的评论:

还没有评论