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

Leetcode LCR 187. 破冰游戏

1.题目基本信息

1.1.题目描述

社团共有 num 位成员参与破冰游戏,编号为 0 ~ num-1。成员们按照编号顺序围绕圆桌而坐。社长抽取一个数字 target,从 0 号成员起开始计数,排在第 target 位的成员离开圆桌,且成员离开后从下一个成员开始计数。请返回游戏结束时最后一位成员的编号。

1.2.题目地址

https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/description/

2.解题方法

2.1.解题思路

约瑟夫环问题

递推式:f(n,m)=(f(n-1,m)+m)%n

2.2.解题步骤

递推式证明:

问题:假设有n个元素,从0开始编号,并形成一个环,初始从编号0开始计数,每次将第m个元素从环中剔除,然后从其下一个元素重新开始计数,问最后一个剔除的元素是多少?

假设f(n,m)为上面的(n,m)问题的解;

f(n,m)递推式:

  • f(n,m)=(f(n-1,m)+m)%n

  • 初始f(1,m)=0

递推式推导:

  • 第一次提出的是第m个元素,即编号为(m-1)%n的元素,并且下一个开始计数的元素的编号为m%n,即为t=m%n;

  • 对于第一次删除后的元素序列0,1,2,...,t-2,t,...,n-1,将t,...,n-1的子序列移动到前面,得到序列t,...,n-1,0,1,2,...,t-2,记该序列为arr1;

  • 将arr1的每个元素加上(n-t)并对n取模,得到序列0,1,...,n-t-1,n-t,...,n-2,记该序列为arr2,可以观察到arr2就是一个f(n-1,m)子问题的对应序列;

  • 为了找到子问题与原问题的关系,就需要想办法将arr2映射为arr1,我们可以将arr2的每个元素减去(n-t)再对n求模,即(x-(n-t))/n=(x+t)/n,等价于将arr2的每个元素加上t然后对n取模;

  • 所以就有递推式:f(n,m)=(f(n-1,m)+t)%n=(f(n-1,m)+m)%n;

  • 通过该递推式即可求出f(n,m)

3.解题代码

Python代码

class Solution:def iceBreakingGame(self, num: int, target: int) -> int:# 思路:递推式f(n,m)=(f(n-1,m)+m)%nf = 0for i in range(2, num + 1):f = (f + target) % ireturn f

4.执行结果

http://www.xdnf.cn/news/747037.html

相关文章:

  • cuda_fp8.h错误
  • Python 中Vector类的格式化实现,重点拆解其超球面坐标系的设计精髓
  • C# 面向对象特性
  • 吉林第三届全国龙舟邀请赛(大安站)激情开赛
  • 打卡day41
  • Kanass入门教程- 事项管理
  • 科普:Linux `su` 切换用户后出现 `$` 提示符,如何排查和解决?
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试官和面试记录的分享功能(2)
  • InfluxDB 高级函数详解:DERIVATIVE、INTEGRAL、SPREAD、HISTOGRAM 与 DIFFERENCE
  • [SC]SystemC在CPU/GPU验证中的应用(五)
  • 22睿抗省赛真题
  • DAY41
  • 【SLAM自救笔记1】:苟活
  • 【Netty系列】消息编码解码框架
  • LeetCode[110]平衡二叉树
  • 第6章 放大电路的反馈
  • AI Agent、Function Calling 与 MCP 协议的原理与实践
  • Linux系统-基本指令(4)
  • 评标专家随机抽选系统-建设方案——仙盟创梦IDE
  • WEB3——简易NFT铸造平台之nft.storage
  • 【知识点进阶】
  • Java 中 Redis 过期策略深度解析(含拓展-redis内存淘汰策略列举)
  • TI MSPM0G3507 简易PID项目显示和按键控制
  • [SLAM自救笔记0]:开端
  • 安装win11之后,电脑经常会跳出“无法在此设备上加载驱动程序”的提示。无法加载的驱动程序分别为“pcdsrvc_x64.pkms”“iqvw64e.sys”
  • OpenHarmony标准系统-HDF框架之音频驱动开发
  • 2.2HarmonyOS NEXT高性能开发技术:编译优化、内存管理与并发编程实践
  • Spring Cache核心原理与快速入门指南
  • Leetcode 1908. Nim 游戏 II
  • 【shell】让 CPU 运行到满负荷状态