优选算法——双指针专题3(快慢双指针)

🔥近津薪荼:个人主页

🎬个人专栏:《c语言基础知识详解》《c++基础知识详解》《Linux操作系统及网络基础知识分享》《近津薪荼的算法日迹》

✨流水不争先,争的是滔滔不绝

⭐️树木不争高,争的是生生不息


本期博客知识点导图

1.上期优解思路参考代码

cpp 复制代码
class Solution {
public:
    void duplicateZeros(vector<int>& arr) {
        int cur=0,dest=-1,n=arr.size();
        //找位置
        while(cur<n)
        {
            if(arr[cur]) //判断cur
            dest++;
            else
            dest+=2;
            if(dest>=n-1)//判断停止
            break;
            cur++;
        }
        if(dest==n)//处理特殊情况
        {
            arr[n-1]=0;
            cur--;
            dest-=2;
        }
        while(cur>=0)//执行从后往前复写
        {
            if(arr[cur])
            arr[dest--]=arr[cur--];//后置--先使用再--
            else{
                arr[dest--]=0;
                arr[dest--]=0;
                cur--;
            }
        }
    }
};

有不懂的点,大家可以在评论区讨论一下,如果是第一次接触这种模拟加双指针的题目发蒙很正常,接触多了就好了。道阻且长,行则将至,一起加油吧。

如果参考代码有错误,欢迎大家批评指正!

2.本期题目解析

快乐数(点击跳转)

每一次操作,该数被替换成各位数字的平方和

重复操作最后一定会得到一个循环,有且只有如图的两种情况(核心思想)

返回值是bool类型。

3.思路讲解

3.1联想链表

看到这里,有数据结构基础的同学,可能一眼就想到了循环链表,以及一道经典的题目:判断链表是否带环,当然没写过也没关系~

要判断链表是否带环,第一个想到的就应该是快慢双指针,由于链表是线性表,如果指针能够相遇,那么链表一定带环。

就比如一个线性跑道(单向通行的一条路),一辆快车和一辆慢车在上边行驶,如果跑道带环,进入环之后,快车和慢车就一定会相遇(套圈)。

图例:

3.2快慢双指针

我们之前说过,双指针是一种思想,不一定就是指针,当然在判断链表是否带环的题目中,快慢双指针就是指向链表节点的指针,在之前的两道题中,双指针是数组下标,而在本题中,双指针将被抽象成一个具体的数据(解题关键)

3.3代码思路

与环相关的问题,想快慢双指针。

一般情况下先判断是否成环。

既然题目告诉我们必然成环,那么我们可以跳过这一步,直接来判断环里是否为1即可。

逻辑:

1.定义快慢双指针(每次快指针比慢指针**多操作一次,**fast算两次,slow算一次)。
2.判断快慢双指针相遇时,两个数值是否为1。

上一期的题目,看完解析,一定一定要自己下去敲一遍,不然约等于白看哦~

4.预告

下期要讲解的题目是:

盛水最多的容器(点击跳转)

我们下期再见~

相关推荐
To_OC1 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
用户938515635076 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC8 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥8 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者9 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者10 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月13 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星14 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星14 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试