快乐数---链表的入口点

news2024/10/6 10:32:20

文章目录

  • 一、鸽巢原理
  • 二、环的入口点
    • 分析题目
    • 思路
    • 代码
  • 三、快乐数
    • 分析题目
    • 思路
    • 代码

在刷题中,遇到这样两道类似知识点的题目,下面是两道题的链接,感兴趣的朋友可以去尝试一下。力扣链接: 快乐数力扣链接: 环形链表。

一、鸽巢原理

这两道题都用到这样的一个知识点–鸽巢原理,也叫抽屉原理

鸽巢原理(Pigeonhole Principle)是一种基本的数学原理,通常用于证明存在性问题。该原理的核心思想是:如果有更多的物品(例如鸽子)要放入比可用的位置(巢)更少的容器中,则至少会有一个容器中放入了多个物品。换句话说,如果将n+1个或更多的物品放入n个容器中,则至少有一个容器中至少有两个物品。
这个原理在解决许多数学问题时非常有用,包括组合数学、图论、概率论等领域。它经常被用来证明某些对象的存在性,而不需要给出具体的构造或描述。

用简明的话来讲,就是有N个鸽子巢穴,有N+1个鸽子,那么必定有一个巢穴的有2个以上的鸽子

二、环的入口点

分析题目

在这里插入图片描述
在这里插入图片描述
题目要中有两个要素需要我们去做:
1.判断是否有环
2.若有环,求出入口点

思路

首先我们要判断是否有环
采用快慢双指针的思想,定义一个快指针和慢指针,每次快指针走两步,满指针走一步为什么快指针走两步,慢指针走一步呢?不能快指针走三步,四步,慢指针走两步三步吗?原因如下
在这里插入图片描述
在这里插入图片描述

判断出链表有环
判断出链表有环之后,我们就要寻找入口点了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码

public class Solution {
    public ListNode detectCycle(ListNode head) {
        if (head == null || head.next == null){
            return null;
        }
           ListNode slow = head;
           ListNode fast = head;
           while (fast!=null && fast.next != null){
               fast = fast.next.next;
               slow = slow.next;
               if (slow == fast){
                   break;
               }
           }
           if (fast == null || fast.next==null){
               return null;
           }
           slow = head;
           while (slow != fast){
               slow  = slow.next;
               fast = fast.next;
           }
           return slow;

    }
}

三、快乐数

分析题目

在这里插入图片描述
这里是题目表述,题目虽然是简单类型,但也要搞清楚为什么可以这样做,才是刷题的根本。
单看题目描述可能不太直观,这里是案例,帮助大家理解题目
在这里插入图片描述
在这里插入图片描述

这个题最精髓的地方在于搞懂无限循环。这也是写这道题解的原因。
其中题目给出了n的取值范围。 1 <= n <= 2,147,483,647

思路

我们先梳理思路,给出一个数,我们按照题目要求,计算每一位的平方的和,与1判断,如果不相等,则再次重复操作。
那么我们怎么能知道这个数,是不是一在无限循环呢?
这里就用到鸽巢原理了。
在这里插入图片描述
当重复的数不是1时,我们就退出,说明不是快乐数
因为当重复的数字不是1时,他们往后的操作的值一定相等,最后重复的还是这个数字。
在这里插入图片描述
由分析题目可以得出,这个数字一定会重复,所以我们只要判断重复的数字是不是为就可以。
所以我们可以采用快慢双指针的思想来进行代码的书写。
具体思路:定义一个快指针,每次走两步,定义一个慢指针,每次走一步,当两个指针的值相等时,判断是否为。

代码

 public int func(int n){//计算每位平方的和的函数
        int sum = 0;
        while (n > 0){
            int temp = n%10;
            sum += temp*temp;
            n = n/10;
        }
        return sum;
    }
    public boolean isHappy(int n) {
           int slow = n;//慢指针
           int fast = func(n);//快指针
           while (slow != fast){//循环的条件
               slow = func(slow);//走一步
               fast = func(func(fast));//走两步
           }
           return fast == 1;//判断条件
    }

以上就是所有内容,如果对你有帮助的话,点赞关注支持一波吧!

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

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

相关文章

Elastic Stack--04--ES中的检索方式、Query DSL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.ES中的检索方式第一种方式GET bank/_search # 检索bank下的所有信息&#xff0c;包括 type 和 docsGET bank/_search?q*&sortaccount_number:asc 第二种方式…

生产管理MES系统在卫浴企业中的应用

在卫浴企业的制造过程中&#xff0c;实现透明车间管理是一个旨在提升效率、质量和可视性的重要目标。MES系统可以在卫浴企业中帮助打造透明车间&#xff0c;提升生产管理的效率和可视性。具体能实现哪些管理呢&#xff1f; 实时监控生产状态&#xff1a; MES系统可以实时监控车…

指针运算题

题目一&#xff1a; #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; 答案&#xff1a; 2&#xff0c;5 详解&#xff1a; …

Kubesphere前端项目分析

1 KubeSphere console功能导图 模块&#xff1a; 命令行工具 (kubectl) 日志&#xff08;Logging&#xff09; 平台设置&#xff08;Platform Settings&#xff09; 服务组件&#xff08;Service Components&#xff09; 监控和警报&#xff08;Monitoring & Alerting&…

javascript:void(0);用法及常见问题解析

在Web开发中&#xff0c;javascript:void(0);是一个经常被用到的代码片段&#xff0c;特别是在一些老式的网页中。这个代码片段的作用是执行一个空操作&#xff08;null operation&#xff09;&#xff0c;即不执行任何操作。它的主要用途是在JavaScript代码中创建一个空链接&a…

JavaScript数组常见实例方法:forEach、filter、map、reduce、find、every等

博客背后的故事 其实我23年7月就学过这些数组方法了&#xff0c;但是为什么24年3月才做笔记呢&#xff1f;这就要讲一个小故事了&#xff08;不想听故事的同学自行拖动滚动条&#xff09; 24年年初我和两个队友合作开发一个小程序。JavaScript中数组的实例方法我已经学了很久…

阿波罗登月需要解决飞行控制问题,数学家卡尔曼在维纳控制的基础上提出了卡尔曼滤波

说到登月&#xff0c;很多人只想到和火箭以及航天器相关的技术&#xff0c;其实登月离不开信息技术的革命。因为从飞行控制到远程通信&#xff0c;都需要解决很多过去从未遇到过的难题。 登月首先要保证在月球上着陆的地点准确&#xff0c;而且要保证返回火箭和飞船能够在月球轨…

sizeof和strlen的详细万字解读

sizeof和strlen的对比 sizeof不是函数 侧面证明sizeof不是函数 如果是函数 应该需要有括号 不能落下来 strlen 只针对字符串 包含头文件 string.h 并且这个是个函数 随机数值 sizeof里面有表达式的话 表达式里面是不参与计算的 下面的s求出的是4 就是因为是不参与计算的 不…

opencv dnn模块 示例(24) 目标检测 object_detection 之 yolov8-pose 和 yolov8-obb

前面博文【opencv dnn模块 示例(23) 目标检测 object_detection 之 yolov8】 已经已经详细介绍了yolov8网络和测试。本文继续说明使用yolov8 进行 人体姿态估计 pose 和 旋转目标检测 OBB 。 文章目录 1、Yolov8-pose 简单使用2、Yolov8-OBB2.1、python 命令行测试2.2、opencv…

图机器学习(3)-面向节点的人工特征工程

0 问题引入 地铁导航图 计算机是看不懂这些图&#xff0c;计算机只能看懂向量、矩阵。 传统图机器学习只讨论连接特征。 构造一个新的特征 x 1 x 2 x_1x_2 x1​x2​&#xff0c;有利于分开这种数据。 人需要去翻译这些计算机不懂的特征&#xff0c;变成计算机可以懂…

数据结构之栈详解(C语言手撕)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

「2024指南」tf卡格式化了数据怎么恢复?

咨询&#xff1a;我把TF卡插入了我的安卓手机并将其设为内部存储&#xff0c;然后保存了大量重要资料。不久后&#xff0c;我无意中将TF卡拔出。当我再次插入时&#xff0c;手机提示必须格式化TF卡。我不小心点击了格式化选项&#xff0c;导致里面所有重要的资料都不见了。请问…

Java基础语法深入讲解

Java是一种面向对象的编程语言&#xff0c;由Sun Microsystems公司于1995年发布。它被设计为具有跨平台兼容性&#xff0c;这得益于Java虚拟机&#xff08;JVM&#xff09;的架构&#xff0c;允许开发者“一次编写&#xff0c;到处运行”&#xff08;Write Once, Run Anywhere&…

基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、目标分割

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Maven基础简介

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;spring等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Maven简介 Maven是什么 Maven…

day12_SpringCloud(Gateway,Nacos配置中心,Sentinel组件)

文章目录 1 Gateway组件1.1 Gateway简介1.2 Gateway入门1.3 网关路由流程图1.4 路由工厂1.5 过滤器1.5.1 过滤器简介1.5.2 内置过滤器1.5.3 路由过滤器1.5.4 默认过滤器1.5.5 全局过滤器1.5.6 过滤器执行顺序 2 Nacos配置中心2.1 统一配置管理2.2 Nacos入门2.2.1 Nacos中添加配…

有趣的数学 博弈论初探

1、简述 博弈论是数学的一个分支&#xff0c;专注于分析此类博弈。博弈论可以分为两个主要分支学科&#xff1a;经典博弈论和组合博弈论。经典博弈论研究玩家同时移动、下注或制定策略的游戏。 从数学意义上讲&#xff0c;游戏是指玩家根据定义的规则做出理性决策&#xff0c;试…

js小案例-省市级联

运行效果&#xff1a; 代码演示&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>省市级联</title><style type"text/css">.regist_bg {width: 100%;height: 600px;padding-top: 40px…

四元数(Quaternion)的一些性质

四元数(Quaternion)是用于三维旋转和定向的四部分组成的超复数&#xff0c;超复数简单理解就是比abi这样的复数更复杂的复数&#xff0c;其中abi这样的复数我们也可以叫做二元数&#xff0c;表示复平面的一点&#xff0c;对于熟悉欧拉公式的朋友就知道&#xff0c;也可以看成是…

请编程输出无向无权图各个顶点的度 ← 邻接矩阵存图

【题目描述】 请编程输出无向无权图各个顶点的度。【测试样例示意图】【算法代码】 #include <bits/stdc.h> using namespace std; const int maxn100; int mp[maxn][maxn]; //无向无权图的邻接矩阵 int V,E; //顶点数、边数 int sx,ex; //起点编号、终点编号int main()…