双指针(3)_快慢指针_快乐数问题

news2024/11/15 21:54:33

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

双指针(3)_快慢指针_快乐数问题

收录于专栏【经典算法练习
本专栏旨在分享学习C++的一点学习笔记,欢迎大家在评论区交流讨论💌

目录

1.题目链接:

2.题目描述:

3.解法:

算法思路:

算法流程:

代码展示:

结果分析:

4.总结:


 

1.题目链接:

202. 快乐数 - 力扣(LeetCode)

2.题目描述:

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

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

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 231 - 1

3.题目分析:

为了方便叙述,将「对于⼀个正整数,每⼀次将该数替换为它每个位置上的数字的平方和」这一个操作记为x

题目告诉我们,当我们不断重复 x 操作的时候,计算一定会「死循环」,死的方式有两种:

        ▪ 情况一:一直在 1 中死循环,即 1 -> 1 -> 1 -> 1......

        ▪ 情况二:在历史的数据中死循环,但始终变不到 1

由于上述两种情况只会出现一种,因此,只要我们能确定循环是在「情况一」中进行,还是在「情况二」中进行,就能得到结果。

示例一:

示例二: 

简单证明: 

a. 经过一次变化之后的最大值是: 9^2 * 10 = 810 ,也就是在题目要求变化的区间 [1, 2^31-1=2147483647] ,选一个更大的最大( 999999999 ), 也就是变化区间在[1, 810] 之间;

b. 根据「鸽巢原理」(n个巢,n+1个鸽,至少有一个巢里面的鸽子数大于1),一个数变化 811 次之后,必然会形成⼀个循环;

c. 因此,变化的过程最终会走到⼀个圈里面,因此可以用「快慢指针」来解决。

4.解法:

算法思路:

根据上述的题目分析,我们可以知道,当重复执行 x 的时候,数据会陷入到一个「循环」之中。 而「快慢指针」有一个特性,就是在一个圆圈中,快指针总是会追上慢指针的,也就是说他们总会相遇在一个位置上。如果相遇位置的值是 1 ,那么这个数一定是快乐数;如果相遇位置不是 1 的话,那么就不是快乐数。

证明为什么两个快慢指针一定会相遇?两个快慢指针为什么相遇点是入环的起始点?

这个我就不过多证明,详细证明大家可以看下面的博客,里面关于链表的带环问题进行了详细的分析与证明:

链表经典面试题02--链表的带环问题-CSDN博客

算法流程:

1. 单独实现将每个数的位数进行平方求和的函数(因为在题目中会多次使用)

2. 定义两个快慢指针slow和fast

3. 当我们的slow != fast时,说明slow还没与fast相遇,那么slow++,fast += 2;

    当我们的slow == fast时,说明slow与fast相遇,且相遇点是入环起始点,那么我们只需要判断这个点的值是否为1,为1则为快乐数,否则不是.

注意:我们的循环判断条件为slow != fast,那么我们两个指针初始化时,不能同时初始化为n,应该将slow = n, fast = n各个位数的平方和;

代码展示:

class Solution {
public:
    int numsum(int n)
    {
        int sum = 0;
        while(n)
        {
            int x = n % 10;
            sum += x * x;
            n /= 10;
        }
        return sum;
    }

    bool isHappy(int n) {
        int slow = n, fast = numsum(n);
        while(slow != fast)
        {
            slow = numsum(slow);
            fast = numsum(numsum(fast));
        }
        if(slow == 1) return true;
        else return false;
    }
};

结果分析:

顺利通过!!! 

4.总结:

这道题考察了双指针算法中的快慢指针,快慢指针在平常算法中还算比较常见,希望大家可以通过这道题掌握这种算法,如果大家还想练习的话,可以参考下面的博客--有关链表的带环问题,进行加深练习!!!

链表经典面试题02--链表的带环问题-CSDN博客

对了,如果这篇博客对你有帮助的话,不要忘记赞👍 收藏✨ 留言✉ 加关注💓哦!!
大家也可以订阅我的经典算法专辑[经典算法练习],每天都会更新一道经典算法(正常来说),让你遇到算法不在害怕!!!

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

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

相关文章

天润融通解开售后维修的成本枷锁,提高维修服务效率

如今&#xff0c;企业客户服务在开展业务咨询和售后受理时&#xff0c;主要方式还是通过电话与在线方式进行。这种方式虽然方便&#xff0c;但是对于一些非常紧急的情况还是显得有些不够。 比如&#xff0c;虽然现在许多企业APP已经实现了一键咨询和一键报修&#xff0c;但当客…

[Deepin] 简单使用 RustDesk 实现远程访问Deepin

本教程假设你学会了看官方文档&#xff0c;且拥有基本的IT常识 本教程仅提供可用的方法&#xff0c;并讲述局限性和更优但更复杂的方法&#xff0c;不是一个手把手教程 目标&#xff1a;实现远程访问Deepin 依托 樱花frpRustDesk的“允许通过ip访问” 概述 在RustDesk打开…

谷歌seo网址如何快速被收录?

想让你的网站快速被搜索引擎收录&#xff0c;可以采取几种不同的策略。首先&#xff0c;确保你的网站内容丰富、有价值&#xff0c;搜索引擎更喜欢收录内容质量高的网站。同时&#xff0c;增强网站的外链建设&#xff0c;做好这些站内优化&#xff0c;接下来就是通过谷歌搜索控…

AMV格式转换,试试这五种转换方式

AMV格式转换&#xff0c;AMV格式是一种专为MP4播放器而开发的视频格式&#xff0c;具有小巧、易于传输和较好的视频质量等特点。然而&#xff0c;AMV格式并不是普遍支持的格式&#xff0c;这导致了许多用户在使用MP4播放器时无法播放AMV格式的视频。为了帮助大家解决这一问题&a…

动态化-鸿蒙跨端方案介绍

一、背景 &#x1f449; 华为在2023.9.25官方发布会上宣布&#xff0c;新的鸿蒙系统将不再兼容安卓应用&#xff0c;这意味着&#xff0c;包括京东金融APP在内的所有安卓应用&#xff0c;在新的鸿蒙系统上将无法运行&#xff0c;需要重新开发专门适用于新鸿蒙系统的专版APP。 …

Java项目: 基于SpringBoot+mysql网上点餐系统分前后台(含源码+数据库+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql网上点餐系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能齐…

深度学习特征提取魔改版太强了!发文香饽饽!

要说CV领域经久不衰的研究热点&#xff0c;特征提取可以占一席&#xff0c;毕竟SLAM、三维重建等重要应用的底层都离不开它。 再加上近几年深度学习兴起&#xff0c;用深度学习做特征提取逐渐成了主流&#xff0c;比传统算法无论是性能、准确性还是效率都更胜一筹。 目前比较…

AAC高级音频编码技术

一、什么是AAC AAC的中文名称是高级音频编码技术&#xff0c;它是基于MPEG-2的一种全新的音频编码技术。随着时代的发展&#xff0c;目前AAC的技术升级到MPEG-4表准。AAC广泛的应用在网络传输、高清录制等领域&#xff0c;而AAC技术的出现就是为了取代之前的MP3格式。 二、为什…

类的加载过程与初始化小记

//部分内容来自“狂神说java” 代码验证 解释 1.加载类的信息&#xff0c;加载到内存中&#xff0c;如例子&#xff0c;将Test05和A类的信息加载到方法区&#xff0c; 2.加载完成后&#xff0c;立马生成一个class对象&#xff0c;如例 java.lang.class对象代表Test05类..., 3…

畅捷通ERP远程访问:使用巴比达内网穿透的体验

ERP系统的应用越来越普遍。畅捷通ERP作为一款优秀的企业资源管理工具&#xff0c;帮助企业整合资源&#xff0c;提高运营效率。然而&#xff0c;很多企业在使用畅捷通ERP时&#xff0c;面临着远程访问的问题。为了有效解决这一问题&#xff0c;我尝试了巴比达内网穿透&#xff…

2024高教社杯全国大学生数学建模竞赛C题保姆级分析完整思路+代码+数据教学

2024高教社杯全国大学生数学建模竞赛C题保姆级分析完整思路代码数据教学 C题题目&#xff1a;农作物的种植策略 今年的题目很有意思&#xff0c;和去年C题题目相关联了&#xff0c;接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 1 总体分析 1.1 问题背景&…

[算法]单调栈解法

目录 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 42. 接雨水 - 力扣&#xff08;LeetCode&#xff09; 84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 通常是一维数…

Ubuntu: 配置OpenCV环境

从从Ubuntu系统安装opencv_ubuntu安装opencv-CSDN博客文章浏览阅读2.3k次&#xff0c;点赞4次&#xff0c;收藏14次。开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库。OpenCV的应用领域包括:2D和3D功能工具包、运动估计、面部识别系统、手势识别、人机交互、…

2024 高教社杯 数学建模国赛 (C题)深度剖析|农作物的种植策略|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…

数学专题.

数论 1.判断质数 定义&#xff1a;在大于1的整数中&#xff0c;如果只包含1和本身这两个约数&#xff0c;就称为质数or素数 Acwing 866.试除法判断质数 2.预处理质数&#xff08;筛质数&#xff09; Acwing 868.筛质数 3.质因数分解 Acwing 867.分解质因数 4.阶乘分解 5.因…

2024最新软件测试面试题(附答案)来测试下你的水平

1、软件测试的目的是&#xff08; &#xff09; A、试验性运行软件 B、发现软件错误 C、证明软件正确 D、找出软件中全部错误 【答案】B 2、下面说法正确的是( ) A、经过测试没有发现错误说明程序正确 B、测试的目标是为了证明程序没有错误 C、成功的测试是发现了迄今…

数字货币是怎么回事什么是数字货币

数字货币的定义 数字货币是一种基于密码学原理的数字形式表示的货币&#xff0c;通过特定的加密算法和分布式账本技术实现安全交易和流通。它不像传统货币那样具有实体形态&#xff0c;而是以电子方式存在。数字货币可以通过互联网进行转账和交易&#xff0c;通常依赖区块链等分…

OPC DA

默认端口号: TCP 135 参考https://wenku.baidu.com/view/8f2b18a229f90242a8956bec0975f46527d3a7e4.html?_wkts_1725526157944&bdQuery%E6%9F%A5%E7%9C%8B%E8%A5%BF%E9%97%A8%E5%AD%90opcDA%E7%AB%AF%E5%8F%A3%E5%8F%B7 OPC DA ,OPC UA简介https://www.cnblogs.com/mi…

Qt 应用程序主界面

主要窗口类的概述 这些类提供了典型现代主应用程序窗口所需的一切&#xff0c;如主窗口本身、菜单和工具栏、状态栏等。 QAction 可以插入小部件的抽象用户界面操作 QActionGroup 将动作组合在一起 QDockWidget 小部件&#xff0c;可以停靠在QMainWindow中&#xff0c;也可以作…

springboot+vue+mybatis计算机毕业设计音乐播放系统+PPT+论文+讲解+售后

音乐播放系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&#xff0c;音乐…