优选算法——双指针专题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.预告

下期要讲解的题目是:

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

我们下期再见~

相关推荐
董董灿是个攻城狮1 小时前
AI视觉连载8:传统 CV 之边缘检测
算法
blasit8 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
AI软著研究员8 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish9 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱10 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习