算法题剖析:找出游戏的获胜者(三)

发布时间:2026/10/19 10:51:25

算法题剖析:找出游戏的获胜者(三) 接上文我们来讲讲第二种解决方案方法二数学 递归思路和算法以下用 f(n,k) 表示 n 名小伙伴做游戏每一轮离开圈子的小伙伴的计数为 k 时的获胜者编号。当 n1 时圈子中只有一名小伙伴该小伙伴即为获胜者因此 f(1,k)1。当 n1 时将有一名小伙伴离开圈子圈子中剩下 n−1 名小伙伴。圈子中的第 k 名小伙伴离开圈子k 满足 1 ≤ k≤ n 且 k - k 是 n 的倍数。由于 1≤k′≤n因此 0≤k′−1≤n−1。又由于 k−k′ 是 n 的倍数等价于 (k-1)-(k-1)是 n 的倍数因此 k′−1(k−1)modnk′(k−1)modn1。当圈子中剩下 n−1 名小伙伴时可以递归地计算 f(n−1,k)得到剩下的 n−1 名小伙伴中的获胜者。令 xf(n−1,k)。由于在第 k 名小伙伴离开圈子之后圈子中剩下的 n−1 名小伙伴从第 k1名小伙伴开始计数获胜者编号是从第 k1名小伙伴开始的第 x 名小伙伴因此当圈子中有 n 名小伙伴时获胜者编号是 f(n,k)(k′modnx−1)modn1(kx−1)modn1。将 xf(n−1,k) 代入上述关系可得f(n,k)(kf(n−1,k)−1)modn1。代码Python3class Solution: def findTheWinner(self, n: int, k: int) - int: return 1 if n 1 else (k self.findTheWinner(n - 1, k) - 1) % n 1Javaclass Solution { public int findTheWinner(int n, int k) { if (n 1) { return 1; } return (k findTheWinner(n - 1, k) - 1) % n 1; } }C#public class Solution { public int FindTheWinner(int n, int k) { if (n 1) { return 1; } return (k FindTheWinner(n - 1, k) - 1) % n 1; } }Cclass Solution { public: int findTheWinner(int n, int k) { if (n 1) { return 1; } return (k findTheWinner(n - 1, k) - 1) % n 1; } };复杂度分析时间复杂度O(n)其中 n 是做游戏的小伙伴数量。需要计算的值有 n 个每个值的计算时间都是 O(1)。空间复杂度O(n)其中 n 是做游戏的小伙伴数量。空间复杂度主要取决于递归调用栈的深度为 O(n) 层。
延伸阅读

更多相关文章

2026/10/19 10:51:24

看懂大模型提速核心,通俗拆解KV Cache工作原理

用过ChatGPT、文心一言这类大语言模型的朋友,应该都有过直观体验,输入问题后模型会逐字输出答案,流畅度很高,但很少有人知道,模型每输出一个字,背后都在进行海量计算。很多人疑惑,为什么短文本回…

2026/10/16 7:50:59

IR2130 故障保护电路设计:过流检测与22mΩ采样电阻参数详解

IR2130 过流保护电路深度设计:22mΩ采样电阻的工程实践1. 过流保护机制的核心设计逻辑IR2130芯片内置的过流保护功能是电力电子系统可靠运行的关键保障。当ITRIP引脚电压超过0.5V阈值时,芯片会在400ns内快速关断所有输出通道,并通过FAULT引脚…

2026/10/17 16:08:10

AI辅助开发中的代码质量保障与工程实践指南

在数字化转型浪潮席卷各行各业的今天,人工智能(AI)技术已成为提升效率、优化决策的重要工具。然而,在实际开发与应用过程中,过度依赖AI输出而缺乏批判性思考,往往会导致项目陷入“垃圾进,垃圾出…

2026/10/19 10:47:08

OpenClaw:轻量级消息总线驱动的Agent协同框架

1. 项目概述:一场被误读的“爆火”背后,到底在解决什么问题?“OpenClaw”这个名字最近在技术圈刷屏了——GitHub 上不到三个月冲到30万星,速度碾压此前所有AI基础设施类项目。标题里那句“赢的不是模型,是消息总线”&a…

2026/10/19 10:47:08

OpenClaw消息总线:解耦智能体模块的协议级基础设施

1. 项目概述:一场被误读的“爆火”背后,到底在解决什么真问题?最近刷到“OpenClaw GitHub 30 万星”这个数据,很多人第一反应是:“又一个大模型开源项目杀疯了?”——但标题里那句“赢的不是模型&#xff0…

2026/10/19 10:47:08

SSL证书详解:类型选择、部署实战与故障排查指南

1. 为什么突然想写这篇SSL证书详解做网站的朋友应该都感受过那种被浏览器红锁支配的恐惧——地址栏里明晃晃的“不安全”三个字,点击率掉一截,用户信任感打折,甚至有些浏览器直接拦截页面。这几年HTTPS早就不是可选项,而是上线前的…

2026/10/19 10:47:08

WinPcap UDP发包程序详解:从以太网帧构造到协议栈绕过

简介:这是一份基于WinPcap实现的UDP发包示例工程,适合学习网络编程、理解UDP协议以及上手WinPcap库的开发者参考。压缩包共349个文件,大小约5.94MB,核心为C/C源码(.h、.cpp)与Visual Studio工程文件&#x…

2026/10/19 10:47:08

Agent通识技能MCP:Memory、Control、Protocol三大工程支柱

1. 从“Agent通识技能”这个说法说起:它到底在指什么?“Agent通识技能——MCP”这个标题,乍看像一串技术黑话拼贴,但其实藏着当前智能体(Agent)开发领域一个非常真实、也非常棘手的痛点:绝大多数…

2026/10/19 10:42:03

MCP服务Stateless架构迁移实战:从有状态扩容故障到无状态水平扩展

1. 从一次线上故障说起:为什么“有状态”的MCP服务让人头疼 去年年底,我负责维护的一个内部工具集成平台做了一次扩容。这个平台的核心职责,是把内部多个业务系统的能力,通过一套统一的协议暴露给上层的智能助手调用。用的就是MCP…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/19 0:04:56

悟空开源无代码平台实战:从实体建模到应用设计避坑指南

简介:基于悟空开源无代码平台的多种应用设计源码,面向希望在不编写代码的情况下快速搭建CRM、HRM、财务系统、ERP、SRM等业务应用的企业与技术人员,通过拖放式界面和内置模板即可完成应用定制与部署。压缩包共697个文件,约10.74MB…

2026/10/19 0:04:56

基于.NET9的多租户权限系统:数据权限与动态API落地实践

简介:这份资源是一套面向 .NET 与 Vue 全栈开发者的中台权限管理系统,后端基于 .Net9,前端采用 Vue3 Element Plus,并配套 uniapp uviewui 移动端方案,实现前后端分离。系统覆盖多租户隔离、数据权限、动态 Api、任务…

2026/10/19 0:04:56

场地预约小程序毕设实战:SSM+微信小程序+MySQL数据库设计到避坑

简介:面向毕业设计场景的场地预约小程序完整项目,基于微信小程序SSMMySql技术栈开发,适合计算机相关专业学生作为选题参考、功能扩展或二次开发起点。系统实现场地类型管理、场地管理、预约管理、取消申请与押金退回等功能,分为管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑