【C++】双指针算法:快乐数

news2024/9/20 5:33:46

1.题目

题目中一定要理解快乐数的含义,否则题目难度直逼困难。
在示例1中n=19,经过几步操作后结果变成1。

那么示例2中n=2是什么情况呢:

2->4->16->37->58->89->145->42->20->4(与前面的4形成闭环)

在计算机中int所能存储的数据范围内,只有这两种情况,没有第三种情况,稍后我会进行简单证明,这个证明过程并不重要,能看懂就行。

2.算法思路

那么如何把示例1和示例2联系在一起呢:

其实示例1最终的结果也是一个闭环,只不过这个环中只有一个数字1。

而示例二中的闭环无非就是不止一个数,且不可能有1。

我们就可以通过闭环中有没有1来判断这个数是否是快乐数。

回到算法本身,我们的算法是双指针,但是这道题目只是单纯的数字,难道真的需要定义一个实实在在的指针嘛?其实不是,双指针只是一个思想,像我的前两篇文章中的数组下标可以代表指针,在这篇文章中一个数字也可以代表指针!思想相同,就属于同一类算法。

那么这道题目就可以用快慢指针来解决,定义一个慢指针slow,和一个快指针fast。慢指针进行一次操作,快指针进行两次操作,因为最后的结果是一个闭环,所以快慢指针一定会相遇,相遇时判断它们是否等于1。等于1就是快乐数,否则就不是。

3.提交结果与代码实现

class Solution {
public:
    int GetSum(int x){
        int sum=0;
        while(x){
            int a=x%10;
            x/=10;
            sum+=a*a;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow=n,fast=n;
        do{
            slow=GetSum(slow);//慢指针走一步
            fast=GetSum(GetSum(fast));//快指针走两步
        }while(slow!=fast);
        return slow==1;
    }
};

4.证明一定存在闭环

在计算机中int所能存储的最大数字是2^31。这是一个十位数,拿最大的十位数来说,经过一次题目中所述的操作,结果就是:10*9^2=810。

也就是说,从0到2^31之间的所有数字经过一次操作后所得的结果一定在落在【1,810】这个区间之内,所以在0到2^31之间任意一个数经过811次操作后,每一次操作的结果一定都落在【1,810】区间内,而这个区间一共有810个整数,811次操作会得到811个整数,就一定可以推出至少有两次操作的结果是相等的!

这个原理就是鸽巢原理,意思就是有n个巢,n+1个鸽子,那么一定只少有一个巢中有两只鸽子!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1617593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苍穹外卖day11 Apache ECharts 数据统计-图形报表

文章目录 前言一、Apache ECharts二、营业额统计1. 业务规则2. 接口设计3. 代码实现 三、用户统计1. 业务规则2. 接口设计3. 代码实现 四、订单统计1. 业务规则2. 接口设计3. 代码实现 五、销量排名Top101. 业务规则2. 接口设计3. 代码实现 前言 作为后端开发人员使用Echarts&…

【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 | 再谈构造函数:初始化列表,隐式类型转换,缺省值)

🔥个人主页:Forcible Bug Maker 🔥专栏:C 目录 前言 取地址及const取地址操作符重载 再谈构造函数 初始化列表 隐式类型转换 explicit关键字 成员变量缺省值 结语 前言 本篇主要内容:类的六个默认成员函数中…

算法训练营day15

一、层序遍历 参考链接7.2 二叉树遍历 - Hello 算法 (hello-algo.com) 层序遍历本质上属于广度优先遍历,也称广度优先搜索, BFS通常借助队列的先入先出的特性实现 参考链接102. 二叉树的层序遍历 - 力扣(LeetCode) 像这种较为…

Go语言并发控制

channel // cancelFn 数据通道关闭通知退出 func cancelFn(dataChan chan int) {for {select {case val, ok : <-dataChan:// 关闭data通道时&#xff0c;通知退出// 一个可选是判断data指定值时退出if !ok {fmt.Printf("Channel closed &#xff01;&#xff01;&…

前端页面助手 (vue)

快速开发页面&#xff08;图形化开发页面&#xff09; 自主编辑 然后自己也可以修改属性 最后导出页面即可 github地址 ;https://github.com/opentiny/tiny-engine

蚓链数字化营销系统与数字资产的关系

蚓链数字化营销系统是一种利用数字技术来实现营销目标的系统。它集成了多种数字营销工具和渠道&#xff0c;以收集、分析和利用客户数据&#xff0c;优化营销活动&#xff0c;并提高营销效果。 数字资产是一种新型的资产类别&#xff0c;它们以电子数据的形式存在&#xff0c;可…

前端开发攻略---实现发送手机验证码60s倒计时效果(手机号验证+按钮文字自定义显示+Vue2写法+Vue3写法)

1、演示 2、说明 1、为了便于演示&#xff0c;本示例将在3秒后就再次发送。您可以根据需要自定义此时间间隔。 2、采用最少的变量以满足需求&#xff0c;以减少内存占用。 3、不仅仅局限于按钮情况&#xff0c;也可应用于不禁用按钮的情况&#xff0c;以实现更多的扩展性。 4、…

02 VMware下载安装银河麒麟(Kylin)系统

02 VMware下载&安装银河麒麟&#xff08;Kylin&#xff09;系统 一、官网1、官网地址 二、下载1、官网下载&#xff08;1&#xff09;服务器操作系统&#xff08;2&#xff09;申请试用&#xff08;3&#xff09;产品试用申请&#xff08;4&#xff09;点击下载连接即可 2、…

Redis篇:缓存穿透以及解决方案

1.何为缓存穿透 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 比如查询一个id 0的数据&#xff0c;这是在redis和数据库中肯定不存在的&#xff0c;这样就属于缓存穿…

vue2+vxe-table实现表格增删改查+虚拟滚动

vue2vxe-table实现表格增删改查虚拟滚动 使用的vxe-table版本&#xff1a;v3.x (vue 2.6 长期维护版) 完整代码 <template><div><vxe-toolbar ref"xToolbar" export :refresh"{query: findList}"><template #buttons><vxe-b…

【网络安全】在网络中如何对报文和发送实体进行鉴别?

目录 1、报文鉴别 &#xff08;1&#xff09;使用数字签名进行鉴别 &#xff08;2&#xff09;密码散列函数 &#xff08;3&#xff09;报文鉴别码 2、实体鉴别 鉴别(authentication) 是网络安全中一个很重要的问题。 一是要鉴别发信者&#xff0c;即验证通信的对方的确是…

富唯智能:打造未来机器人教育新标杆

随着科技的飞速发展&#xff0c;机器人教育正逐渐成为培养未来人才的重要领域。富唯智能&#xff0c;作为业内领先的机器人技术提供商&#xff0c;近日推出了一款全新的机器人教育实践平台系统&#xff0c;旨在为学生提供更加丰富、更具挑战性的学习体验。 该平台系统以AUBO-i5…

A Neural Span-Based Continual Named Entity Recognition Model

《A Neural Span-Based Continual Named Entity Recognition Model》------------AAAI’23 论文链接&#xff1a;https://arxiv.org/abs/2302.12200 代码&#xff1a;https://github.com/Qznan/SpanKL 当前问题&#xff1a; 1.现有的NER模型在适应新的实体类型时往往表现不佳…

基于CAPL的S19文件解析

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件 | Check Box的使用及说明 文章编号&#xff…

js的算法-交换排序(快速排序)

快速排序 基本思想 快速排序的基本思想是基于分治法的&#xff1a;在待排序表L【1...n】中任意取一个元素p 作为枢轴&#xff08;或基准&#xff0c;通常取首元素&#xff09;。通过一趟排序将待排序表划分为独立的两部分L【1...k-1】和L【k1...n】;这样的话&#xff0c;L【1…

低代码技术与仓储管理的新纪元:革命性的供应链变革

引言 在当今数字化时代&#xff0c;企业对于创新和效率的追求越发迫切。在这样的背景下&#xff0c;低代码技术应运而生&#xff0c;成为企业数字化转型的重要工具之一。低代码技术的崛起为企业提供了一种快速、灵活、成本效益高的开发方式&#xff0c;大大缩短了软件开发周期…

如何把视频压缩变小?你应该知道的三个压缩视频的方法

一&#xff0c;视频压缩的基本原理 视频压缩的基本原理是通过去除视频中的冗余信息&#xff0c;减少视频数据的大小&#xff0c;从而达到压缩的目的。视频压缩的方法有很多种&#xff0c;其中最常见的是有损压缩和无损压缩。 二&#xff0c;视频压缩的必要性 1&#xff0c;视…

【智能算法】回溯搜索算法(BSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2013年&#xff0c;P Civicioglu等人受到当前种群与历史种群之间的差分向量的引导启发&#xff0c;提出了回溯搜索算法&#xff08;Backtracking Search Algorithm, BSA&#xff09;。 2.算法原理…

甄美天使1+3退休模式开发|最新升级模式

我是新零售商业架构师肖琳&#xff0c;易创客社交新零售创始‌‌‌‌‌人&#xff0c;擅长品牌从0-1、1-10起盘全过程。易创客新零售&#xff0c;提供商业模式解决方案系统&#xff0c;包括分销系统、微商系统、新零售系统&#xff1b;提供社交新零售陪跑代运营&#xff0c;提供…