当前位置: 首页 > news >正文

leetcode打卡001-约瑟夫问题

约瑟夫问题

其背景故事是关于一组人站成一个圈,从某个人开始报数,每数到特定数字的人将被淘汰出圈,然后从被淘汰人的下一个人重新开始报数,直到最后剩下一个人。问题的目标是确定最后剩下的那个人在最初的位置。

关键词

递归,递归的逻辑
在这里插入图片描述

解释

从0开始给给n个人标记,0,1,2……n-1
n=1时 已经满足题目要求了,只剩下一个人,直接返回下标0
当n>1时 思考一下,下一趟(即递归中的J(n-1,m))喊1的人在上一趟(即递归中的J(n,m))中的位置是 (J(n-1,m)+m)%n
(J(n-1,m)+m) 理解如下:
举个例子:n = 3 (下标 0,1,2) m = 2
第一趟:0,1(√),2 下标1的被淘汰
从2开始报1 ,与第一趟同一个角度:假设报1的是下标理论上应该是0(第一趟的下标是0),现在的2下标是2,他理论下标是0(引入理论下标是为了喊号到m),但是他在上一趟的实际下标是2,当前理论下标与实际下标之间相差(0,2)为2,就是m,所以 (J(n-1,m)+m)就是这样来的
而 (J(n-1,m)+m)%n这样是因为有时候m>n,超过了一圈人数,所以得取模


http://www.mrgr.cn/news/41888.html

相关文章:

  • 栈数据结构:定义,基本操作与应用
  • 探索gmqtt:Python中的AI驱动MQTT库
  • Spring 的 IOC 和 AOP 是什么,有哪些优点?解密 Spring两大核心概念:IOC与AOP的魅力所在
  • LeetCode题练习与总结:丑数 Ⅱ--264
  • 【Java】—— 集合框架:Collection子接口:Set不同实现类的对比及使用(HashSet、LinkedHashSet、TreeSet)
  • 展示批量剪辑分割多个视频,助力轻松剪辑
  • 自研tauri‘2.0+vite5+elementPlus客户端exe聊天系统-源码版
  • YOLO11改进 | 卷积模块 | 添加选择性内核SKConv【附完整代码一键运行】
  • 征程6 工具链常用工具和 API 整理(含新手示例)
  • 动态规划
  • Macos终端常用的命令行指令总结
  • Nodejs多版本切换工具NVM
  • csdn加目录,标题
  • 主动配电网故障恢复的重构与孤岛划分模型——代码
  • 【艾思科蓝】Python数据分析与可视化实战:从入门到进阶
  • 【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}
  • [RabbitMQ] Spring Boot整合RabbitMQ
  • 【含文档】基于Springboot+Vue的海洋馆预约系统(含源码+数据库+lw)
  • 【机器学习】集成学习——提升模型准确度的秘密武器
  • C++ 语言特性12 - 联合体类型