题目链接

Leetcode快乐数

题目描述

 

如下图: 

 

题目解析:

 1.双指针法

算法核心思路

判断快乐数的关键挑战是如何检测是否进入无限循环。这里使用了快慢指针法(Floyd 循环检测算法),这是一种高效检测循环的技巧:

  1. 慢指针:每次计算一次数字的平方和(走一步)
  2. 快指针:每次计算两次数字的平方和(走两步)
  3. 如果是快乐数:最终都会收敛到 1,此时快慢指针会相遇在 1
  4. 如果不是快乐数:快慢指针会在某个非 1 的数字处相遇(检测到循环)

算法执行流程示例

以非快乐数 11 为例,看看算法如何工作:

  1. 初始状态:slow=11,fast=11
  2. 第一次循环:
    • slow = Sum(11) = 1² + 1² = 2
    • fast = Sum(Sum(11)) = Sum(2) = 4
    • 此时 slow≠fast,继续循环
  3. 第二次循环:
    • slow = Sum(2) = 4
    • fast = Sum(Sum(4)) = Sum(16) = 1² + 6² = 37
    • 此时 slow≠fast,继续循环
  4. 后续循环中,快慢指针会逐渐接近,最终在某个非 1 的数字相遇,此时返回 false

算法复杂度分析

  • 时间复杂度:O(log n)

    • 每次计算平方和时,数字的位数大约是 log₁₀n
    • 快慢指针相遇前最多执行 O (log n) 次操作
  • 空间复杂度:O(1)

    • 只使用了常数个额外变量,没有使用额外的数据结构

 

2.哈希表法 

使用哈希表(Hash Set)求解快乐数问题是另一种直观且容易理解的方法。其核心思路是记录每次计算得到的平方和,如果某个平方和重复出现,说明进入了循环,该数不是快乐数;如果最终得到 1,则是快乐数。 

哈希表解法思路 

1.计算数字的各位平方和 

2. 检查该平方和是否为 1:

     若是 1,返回 true(是快乐数)

     若不是 1,检查该平方和是否已在哈希表中: 

  • 若已存在,说明进入循环,返回 false(不是快乐数)
  • 若不存在,将其加入哈希表,继续计算下一个平方和 

 完整代码:

代码解析

  1. getSum 函数:与之前的 Sum 函数功能相同,计算一个数的各位数字平方和。

  2. isHappy 函数

    • 使用unordered_set<int> seen存储已经出现过的数字
    • 循环计算平方和,直到结果为 1 或检测到循环:
      • 若 n=1,返回 true(找到快乐数)
      • 若 n 已在哈希表中,返回 false(检测到循环)
      • 否则将 n 加入哈希表,继续计算下一个平方和

 

执行流程示例(以 19 为例)

  1. 初始 n=19,哈希表为空
  2. 19 不在哈希表中,加入哈希表,计算下一个值:1²+9²=82
  3. 82 不在哈希表中,加入哈希表,计算下一个值:8²+2²=68
  4. 68 不在哈希表中,加入哈希表,计算下一个值:6²+8²=100
  5. 100 不在哈希表中,加入哈希表,计算下一个值:1²+0²+0²=1
  6. 此时 n=1,返回 true(19 是快乐数)

复杂度分析

  • 时间复杂度:O(log n)

    • 每次计算平方和处理 log₁₀n 位数字
    • 最多处理 O (log n) 个不同的数字(因为平方和的增长有上限)
  • 空间复杂度:O(log n)

    • 最坏情况下,哈希表需要存储 O (log n) 个不同的数字

 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧社区构建——2

1.实现Token校验## Token校验URLjson GET /checkToken 参数json HttpServletRequest request 返回json {"msg": "操作成功","code": 200,"status": "ok" }{"msg": "操作成功","code": 200,&q…

K-Means聚类:当数据没有标签时,如何让计算机自动“物以类聚”?

K-Means聚类&#xff1a;当数据没有标签时&#xff0c;如何让计算机自动“物以类聚”&#xff1f;&#x1f44b; 大家好&#xff0c;我是小瑞瑞&#xff01;欢迎回到我的专栏&#xff01; 在我们之前的旅程中&#xff0c;解决的问题大多都有一个明确的“目标”&#xff0c;比如…

万事皆可用 GeeLark AI

在今年4月&#xff0c;GeeLark AI 全面接入 DeepSeek AI 大模型&#xff0c;你可以在独立窗口中便捷地使用 GeeLark AI。除了帮助你编写文案等基础内容&#xff0c;在使用 GeeLark 过程中&#xff0c;如果遇到问题&#xff0c;也可以通过询问 GeeLark AI&#xff0c;及时获取帮…

3D 高保真处理:声网让游戏声音随角色动作变化

传统游戏的声音体验像老式收音机&#xff0c;不管声源位置、距离和障碍物&#xff0c;仅靠左右声道机械调音量&#xff0c;毫无方向感和空间感&#xff0c;如同蒙眼听声辨位。射击游戏中敌人从左边来&#xff0c;耳机却两边同响且音量相近&#xff0c;让人晕头转向&#xff1b;…

Nestjs框架: 请求生命周期与应用生命周期

概述 在 NestJS 框架中&#xff0c;中间件&#xff08;Middleware&#xff09;、管道&#xff08;Pipes&#xff09;、过滤器&#xff08;Filters&#xff09;、拦截器&#xff08;Interceptors&#xff09; 均属于请求处理流程的核心组件&#xff0c;它们共同构成了 NestJS 的…

Nastool+cpolar:群晖NAS用户的全场景影音自由方案

文章目录前言1. 本地搭建Nastool2. nastool基础设置3. 群晖NAS安装内网穿透工具4. 配置公网地址小结5. 配置固定公网地址**第二版&#xff1a;技术整合与效率提升导向****第二版&#xff1a;技术整合与效率提升导向****第二版&#xff1a;技术整合与效率提升导向**Nastool与cpo…

从零开始:Kaggle 竞赛实战入门指南

一、Kaggle社区概述 Kaggle 是全球最大的数据科学和机器学习社区&#xff0c;由Anthony Goldbloom于2010年创立&#xff0c;2017年被Google收购。平台专注于数据科学竞赛、开源数据集共享、协作编程以及技能学习&#xff0c;吸引了从初学者到专业数据科学家的广泛用户群体。 …

sqli-labs:Less-16关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $uname".$uname."; $passwd".$passwd."; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;…

Lipschitz连续函数

Lipschitz function 一、说明 在数学分析中&#xff0c;Lipschitz连续性以德国 数学家 鲁道夫利普希茨 (Rudolf Lipschitz)的名字命名&#xff0c;是函数一致连续性的强形式。直观地说&#xff0c;Lipschitz连续函数的变化速度有限&#xff1a;存在一个实数&#xff0c;使得对于…

Dynamics 365 business central 与Shopify集成

Dynamics 365 Business Central&#xff08;简称 D365 BC&#xff09; 与 Shopify 的集成&#xff0c;能帮助企业实现前端电商平台&#xff08;Shopify&#xff09;与后端 ERP 系统&#xff08;Business Central&#xff09;之间的无缝数据同步&#xff0c;是一种典型的 ERP 与…

TCP RTO 与丢包检测

TCP RTO 是它 40 多年前唯一丢包检测策略&#xff0c;也是当前最后的丢包检测兜底策略&#xff0c;它几乎从没变过。 有个咨询挺有趣&#xff0c;以其案例为背景写篇随笔。大致意思是&#xff0c;嫌 TCP RTO 太大&#xff0c;游戏场景丢包卡顿怎么办&#xff1f;我提供了几行代…

安装php和配置环境变量

为了简单方便&#xff0c;先下载vscode然后下载对应的php安装包&#xff0c;然后配置环境变量&#xff0c;然后点击运行即可下载对应版本的php&#xff0c;这个版本凑合用然后下载完之后解压配置环境变量搜索环境变量将路径添加到环境变量中然后打开vscode添加变量具体看实际路…

Rabbit MQ的消息模式-Java原生代码

一.简单模式1.1.核心逻辑生产者 → 队列 → 单个消费者&#xff08;1:1 直连&#xff09;&#xff0c;消息被消费后自动从队列删除。1.2.关键特性无交换器&#xff08;其实使用的是默认交换机不是显示指定&#xff09;&#xff0c;直接指定队列 消息默认自动确认&#xff08;au…

【lucene】使用docvalues的案例

下面给出一段 可直接跑通 的 Lucene 8.5.0 示例代码&#xff0c;演示如何1. 建索引时为两个字段启用 DocValues&#xff08;一个 NumericDocValues&#xff0c;一个 SortedDocValues&#xff09;&#xff1b; 2. 用 IndexSearcher 按 DocValues 排序&#xff1b; 3. 用 Facet…

IntelliJ IDEA 配置 Maven 阿里云镜像加速源全流程

1. 为什么要加国内镜像源&#xff1f;国内网络访问 Maven 中央仓库经常超时、依赖下载极慢或失败。配置阿里云等国内镜像后&#xff0c;Java 项目依赖下载飞快&#xff0c;极大提升开发效率&#xff0c;是中国开发者必做优化&#xff01;2. 添加阿里云镜像源的步骤&#xff08;…

【worklist】worklist的hl7、dicom是什么关系

HL7和DICOM在Worklist系统中是互补的关系&#xff0c;它们各自承担不同的角色&#xff0c;但协同工作以实现完整的医疗信息系统集成。HL7与DICOM Worklist的关系1. 功能分工DICOM Worklist (Modality Worklist - MWL)主要用于影像设备获取患者和检查信息基于DICOM协议&#xff…

位运算-面试题01.01.判定字符是否唯一-力扣(LeetCode)

一、题目解析1、s[i]仅包含小写字母2、字符串的长度为[0&#xff0c;100]二、算法原理解法1&#xff1a;哈希表用哈希表记录s[i]的字符&#xff0c;如果有重复的&#xff0c;则返回false优化1&#xff1a;由于s[i]中只有小写字母&#xff0c;所以可以创建一个int hash[26]的数组…

wsl /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28‘ not found

遇到的问题并没有解决&#xff0c;这个 glibc-2.28 应该是安装好了 Ubuntu18 问题描述&#xff1a;Ubuntu18 WSL 无法启动 VS Code &#xff0c;因为node版本问题 rootUbuntu18:~# code . /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28 not found (required by /root…

Windows系统ffmpeg.dll丢失怎么办?从错误分析到永久修复的完整流程

您是否遇到过这样的情况&#xff1a;打开心爱的视频编辑软件时&#xff0c;系统突然提示无法启动此程序&#xff0c;因为计算机中丢失ffmpeg.dll&#xff1f;别担心&#xff0c;这个问题比您想象的要常见得多。作为专业的技术支持团队&#xff0c;我们已经帮助数千用户解决了类…

LaTeX 复杂图形绘制教程:从基础到进阶

系列文章目录 第一章&#xff1a;深入了解 LaTeX&#xff1a;科技文档排版的利器 第二章&#xff1a;LaTeX 下载安装保姆级教程 第三章&#xff1a;LaTeX 创建工程并生成完整文档指南 第四章&#xff1a;LaTeX 表格制作全面指南 文章目录系列文章目录前言一、​LaTeX 绘图工具…