欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 【OJ刷题】快慢指针问题

【OJ刷题】快慢指针问题

2024/11/18 2:20:23 来源:https://blog.csdn.net/2301_81874719/article/details/142188346  浏览:    关键词:【OJ刷题】快慢指针问题
这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:OJ刷题入门到进阶
🌏代码仓库:


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述

目录

  • 1. 题目介绍
  • 2. 题目拆解
  • 3. 具体详情
  • 4. 具体代码


1. 题目介绍

难度:易
题目练习:快乐数
题目信息:编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。
  • 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

举个例子: 具体如图1所示
在这里插入图片描述

图1 举个例子

2. 题目拆解

本质上:判断是否有环
特点是:环形循环,若是快乐数循环为1;若是无限循环则不会出现1
解决方法:快慢指针算法,如图2所示
在这里插入图片描述

图2 快慢指针

3. 具体详情

1.定义快慢指针
2. 慢指针每次向后移动一步快指针每次向右移动两步
3.判断相遇的时候的值即可


4. 具体代码

class Solution {
public:// 计算n的每个位置上的数字平方和int square_sum(int n){int sum = 0;while(n){int k = n % 10;sum += k*k;n /= 10;}return sum;}// 判断设置快慢指针,并判断相遇是否为1bool isHappy(int n) {int slow = n, fast = square_sum(n);while(slow != fast){slow = square_sum(slow);fast = square_sum(square_sum(fast));}return slow == 1;}
};

5. 夹带私货

若你能看到看到这篇文章且能看到这,则说明你我有缘留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强


好的,到此为止啦,祝您变得更强
在这里插入图片描述

在这里插入图片描述

道阻且长 行则将至

个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com