算法的学习笔记— 圆圈中最后剩下的数(牛客JZ62)

news/2024/12/27 9:11:07/

img

🏠个人主页:尘觉主页

文章目录

  • 62. 圆圈中最后剩下的数
    • 题目链接
    • 题目描述
    • 解题思路
    • Java 实现
    • 思考分析
    • 😄总结

62. 圆圈中最后剩下的数

题目链接

NowCoder

题目描述

让小朋友们围成一个大圈。然后,随机指定一个数 m,让编号为 0的小朋友开始披数。每次喊到 m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续 0...m-1披数。这样进行,直到剩下最后一个小朋友,该小朋友可以不用表演。

问题:最后剩下的这个小朋友编号是什么?
在这里插入图片描述

解题思路

该问题是关于约瑟夫环(Josephus Problem)的关键计算。在这种问题中,我们需要确定每次出列的人,直到剩下最后一个。

在数学解析中,圈长为 n时,该问题的解可以看作圈长为 n-1的解,然后加上披数的长度 m。因为轮廓是圆形,所以最后需要对 n 取余。

解析情况如下:

  1. 如果圈里只剩下 1 个小朋友,那么编号就是 0
  2. 如果不止 1 个,则通过下列关系进行返正: f(n,m)=(f(n−1,m)+m)%nf(n, m) = (f(n-1, m) + m) % n

这里,在通过混迁进行返正时,最后将实现从最初大圈中剩下的最后一个小朋友的编号。

Java 实现

以下是该解法的 Java 实现:

public int LastRemaining_Solution(int n, int m) {if (n == 0)     // 特殊输入的处理return -1;if (n == 1)     // 通过返正返回条件return 0;return (LastRemaining_Solution(n - 1, m) + m) % n;
}

思考分析

上述代码通过循环完成解析:

  1. 边界情况处理: 如果圈里没有小朋友(n=0),则返回 -1 表示无解。
  2. 选择的解应定义: 如果剩下 1 个小朋友,直接返回 0 作为编号。
  3. 通过参数进行递归: 则通过算法:上一次解法值(LastRemaining_Solution(n - 1, m))加上 m 之后,对 n 取余,将计算实现通过循环碳成了选中。

😄总结

该问题提供了一种关于约瑟夫问题的优雅解法,通过返正方式,在数量不无限加长的情况下,仍能最终解出最后剩下的小朋友编号,并且突显了数学法则和循环计算的精妙。

😁热门专栏推荐
学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img


http://www.ppmy.cn/news/1558488.html

相关文章

Mysql5.7配置主从实际操作记录

👀 什么是MySQL主从配置 指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。 对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的…

【面试系列】深入浅出 Spring

熟悉Spring,对IOC、AOP、Bean生命周期、循环依赖等有深入了解。 面试题整理 描述 Spring Context 初始化的流程介绍 Bean 的生命周期及作用域Bean 的构造方法、 PostConstruct注解、InitializingBean、init-method 的执行顺序?Spring 如何解决循环依赖&…

C语言从入门到放弃教程

C语言从入门到放弃 1. 介绍1.1 特点1.2 历史与发展1.3 应用领域 2. 安装2.1 编译器安装2.2 编辑器安装 3. 第一个程序1. 包含头文件2. 主函数定义3. 打印语句4. 返回值 4. 基础语法4.1 注释4.1.1 单行注释4.1.2 多行注释 4.2 关键字4.2.1 C语言标准4.2.2 C89/C90关键字&#xf…

【机器学习案列】车牌自动识别系统:基于YOLO11的高效实现

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Metricbeat安装教程——Linux——Metricbeat监控ES集群

Metricbeat安装教程——Linux 一、安装 下载安装包: 官网下载地址:https://www.elastic.co/cn/downloads/beats/metricbeat 上传包到linux 切换到安装目录下 解压:tar -zxvf metricbeat-7.17.1-linux-x86_64.tar.gz 重命名安装文件夹 mv met…

【Compose multiplatform教程07】多平台常用组件和重要组件目录

一、基础交互与显示组件 Text 查看示例 功能说明:用于在界面上显示文本内容,支持设置字体、大小、颜色、样式(如加粗、斜体、下划线)等属性,满足不同的文本展示需求,可传达各种信息给用户。示例场景&#…

大模型日报 2024-12-20

大模型日报 2024-12-20 大模型资讯 标题: OpenAI发布季第十一天:ChatGPT深度集成Mac应用,从Chatbot变身AI Agent 摘要:本文报道了OpenAI在其发布季第十一天推出的ChatGPT与Mac应用的深度集成,标志着ChatGPT从单一的会话…

使用Python获取PDF文本和图片的精确位置

在处理和分析PDF文档时,获取文本和图片在页面上的精确位置是一个重要的操作。通过确定这些元素的具体坐标,我们可以实现对PDF内容的更精细控制和理解,这对于自动化文档处理、信息提取以及内容重组等工作流程尤为关键。通过Python编程语言&…