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

下期要讲解的题目是:

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

我们下期再见~

相关推荐
WWZZ20252 小时前
C++:STL(容器deque)
开发语言·c++·算法·大模型·具身智能
AI科技星2 小时前
加速运动正电荷产生加速度反向引力场的详细求导过程
人工智能·线性代数·算法·机器学习·矩阵·概率论
草莓熊Lotso2 小时前
Linux 进程等待与程序替换全解析:从僵尸进程防治到 exec 函数实战
linux·运维·服务器·开发语言·c++·人工智能·python
神奇的代码在哪里2 小时前
跟着官方教程学习鸿蒙ArkTS语言:6大核心知识点深度解读与实践指南
学习·华为·typescript·harmonyos·arkts
shengli7222 小时前
C++与硬件交互编程
开发语言·c++·算法
柏木乃一3 小时前
库的制作与原理(2)ELF格式,程序地址空间part2,程序加载
linux·服务器·c++·进程·elf··进程地址空间
羑悻的小杀马特3 小时前
Elasticsearch + Kibana 实战指南:从安装部署到 C++ 客户端封装,解锁搜索引擎开发核心技能
c++·elasticsearch·搜索引擎·kibana
Gain_chance4 小时前
19-学习笔记尚硅谷数仓搭建-数据仓库运行环境搭建(spark安装及配置)
数据仓库·笔记·学习·spark
Gain_chance4 小时前
21-学习笔记尚硅谷数仓搭建-数据仓库模拟数据生成
数据仓库·笔记·学习