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

devtools/2024/12/28 0:52:12/

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/devtools/145970.html

相关文章

R语言数据分析案例47-上海译文出版社旗舰店图书分析和可视化

一、研究背景 随着数字化时代的发展,图书出版行业面临着日益激烈的市场竞争。上海译文出版社作为一家知名的出版机构,其旗舰店的图书销售数据蕴含着丰富的信息。对最新入库图书进行深入分析和可视化呈现,有助于出版社更好地了解市场动态、读…

重温设计模式--6、享元模式

文章目录 享元模式(Flyweight Pattern)概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式(Flyweight Pattern)概述 定义: 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…

Docker完整技术汇总

Docker 背景引入 在实际开发过程中有三个环境,分别是:开发环境、测试环境以及生产环境,假设开发环境中开发人员用的是jdk8,而在测试环境中测试人员用的时jdk7,这就导致程序员开发完系统后将其打成jar包发给测试人员后…

深入了解Linux —— make和makefile自动化构建工具

什么是make/makefile 在之前写代码的过程中,我们都是对一个文件进行编译链接(gcc编译),但是如果一个项目中,源代码文件非常的多,我们总不能一个一个的进行编译链接,这也太麻烦了;所以现在就来学…

前端真实面试题自用

一、写在前面 笔者,经过计算机学硕考研的失败后,想谋求一份前端工作实在是太难了。一方面,确实曾经学习过的东西很久没有拾起,另一方面,对于前端面经还是记忆不深刻,特地写此贴记录笔者在真实前端面试中遇…

Elasticsearch相关知识@1

目录标题 Lucene1. **什么是 Lucene?**2. **Lucene 在 Elasticsearch 中的作用**3. **Lucene 的核心功能**(1) **倒排索引**(2) **分词**(3) **查询解析**(4) **相关性评分** 4. **为什么 Elasticsearch 使用 Lucene?**5. **Lucene 和 Elasticsearch 的区别**6. **总结** 分片…

云数智融合体系建设实践——以工行软件开发中心为例

随着“云计算第三次浪潮”的涌动,业界正见证着一场围绕“算力”的结构性变革。云计算、大数据、人工智能三大核心技术的深度融合,正推动着算力基础设施的快速发展,实现算力的高效调度与利用,也标志着业界对云计算体系布局的全新理…

Redis篇--应用篇1--会话存储(session共享)

1、概述 实现Session共享是构建分布式Web应用时的一个重要需求,尤其是在水平扩展和高可用性要求较高的场景下。 在分布式服务或集群服务中往往会出现这样一个问题:用户登录A服务后可以正常访问A服务中的接口。但是我们知道,分布式服务通常都…