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

发布时间:2026/10/23 15:35:57

算法题剖析:找出游戏的获胜者(二) 接上文我们来讲讲解决方案方法一模拟 队列思路和算法最直观的方法是模拟游戏过程。使用队列存储圈子中的小伙伴编号初始时将 1 到 n 的所有编号依次加入队列队首元素即为第 1 名小伙伴的编号。每一轮游戏中从当前小伙伴开始数 k 名小伙伴数到的第 k 名小伙伴离开圈子。模拟游戏过程的做法是将队首元素取出并将该元素在队尾处重新加入队列重复该操作 k-1 次则在 k−1 次操作之后队首元素即为这一轮中数到的第 k 名小伙伴的编号将队首元素取出即为数到的第 k 名小伙伴离开圈子。上述操作之后新的队首元素即为下一轮游戏的起始小伙伴的编号。每一轮游戏之后圈子中减少一名小伙伴队列中减少一个元素。重复上述过程直到队列中只剩下 1 个元素该元素即为获胜的小伙伴的编号。代码Python3class Solution: def findTheWinner(self, n: int, k: int) - int: q deque(range(1, n 1)) while len(q) 1: for _ in range(k - 1): q.append(q.popleft()) q.popleft() return q[0]Javaclass Solution { public int findTheWinner(int n, int k) { QueueInteger queue new ArrayDequeInteger(); for (int i 1; i n; i) { queue.offer(i); } while (queue.size() 1) { for (int i 1; i k; i) { queue.offer(queue.poll()); } queue.poll(); } return queue.peek(); } }C#public class Solution { public int FindTheWinner(int n, int k) { Queueint queue new Queueint(); for (int i 1; i n; i) { queue.Enqueue(i); } while (queue.Count 1) { for (int i 1; i k; i) { queue.Enqueue(queue.Dequeue()); } queue.Dequeue(); } return queue.Peek(); } }Cclass Solution { public: int findTheWinner(int n, int k) { queueint qu; for (int i 1; i n; i) { qu.emplace(i); } while (qu.size() 1) { for (int i 1; i k; i) { qu.emplace(qu.front()); qu.pop(); } qu.pop(); } return qu.front(); } };复杂度分析时间复杂度O(nk)其中 n 是做游戏的小伙伴数量k 是每一轮离开圈子的小伙伴的计数。初始时需要将 n 个元素加入队列每一轮需要将 k 个元素从队列中取出将 k−1 个元素加入队列一共有 n−1 轮因此时间复杂度是 O(nk)。空间复杂度O(n)其中 n 是做游戏的小伙伴数量。空间复杂度主要取决于队列队列中最多有 n 个元素。
延伸阅读

更多相关文章

2026/10/24 11:10:14

LCD1602驱动移植实战:从51单片机到STM32的5个关键步骤与引脚配置

LCD1602驱动移植实战:从51单片机到STM32的5个关键步骤与引脚配置 在嵌入式开发领域,LCD1602液晶屏因其价格低廉、接口简单而广受欢迎。许多开发者最初接触LCD1602都是在51单片机平台上,但当项目需要升级到性能更强的STM32时,如何将…

2026/10/24 11:09:02

21|Agent 与 Graph 结合:自主决策,确定性执行 - eino教程

21|Agent 与 Graph 结合:自主决策,确定性执行 《Eino 实战:用 Go 构建 AI 应用与智能体》 第 21 篇 关键词:GraphTool、AgentAsTool、流程复用、职责边界、确定性 前置条件:已完成 16|从流程到 …

2026/10/24 11:09:02

text-to-cad:自然语言生成参数化CAD模型的技术原理与工程实践

1. 项目概述:当文字真正“长出”三维模型——text-to-cad不是概念,是正在落地的工程新范式 最近在几个工业设计团队和高校机械实验室里,我反复听到同一个词被拎出来讨论:“text-to-cad”。它不像“AI绘画”那样自带传播基因&…

2026/10/24 11:09:02

AI训练师:业务与技术之间的‘翻译官’能力重构

1. 这不是“AI培训”,而是一场面向真实交付场景的能力重构“闪学IT-且曼AI训练师开营”——光看标题,很多人第一反应是又一个打着AI旗号的速成班:七天入门、十五天上岗、包就业拿高薪。但我在过去三年深度参与过十余个AI应用落地项目后&#…

2026/10/24 11:04:02

Matlab双目立体视觉实战:标定、极线校正与深度图精度优化

简介:本资源是一套基于Matlab实现的双目立体视觉完整实践项目,面向计算机视觉初学者、高校课程设计学生及Matlab图像处理爱好者,聚焦三维重建核心流程,解决从图像采集到深度图生成的技术闭环问题。压缩包共10个文件,含…

2026/10/23 22:56:35

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

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

2026/10/24 0:02:40

MATLAB缩进快捷键与批量格式化实战指南

1. 被自动缩进折磨的那些年如果你写过MATLAB代码,大概率经历过这种场景:从某个文档、网页或者聊天记录里复制了一段代码,粘贴进编辑器之后,每一行前面都带着莫名其妙的空格,有的行首是四个空格,有的是一个T…

2026/10/24 0:02:40

用Poco实现Qt风格信号与槽的跨平台C++方案

简介:本资源是一份面向C中级开发者的技术实践工程,聚焦于在非Qt框架环境下模拟实现Qt核心通信机制——信号与槽,借助Poco网络库的事件系统完成解耦式对象通信。适用于需在跨平台C项目中引入松耦合回调机制、但受限于无法集成Qt依赖的开发场景…

2026/10/24 0:02:40

ESXi裸机虚拟化安装指南:从硬件兼容到虚拟机部署

1. 为什么还要折腾ESXi:从一台闲置机器说起手里攒了几台淘汰下来的迷你主机,配置不算差,i5加16G内存,扔了可惜,装个桌面系统又觉得浪费。这种场景下,ESXi就成了一个绕不开的选择。它是一套裸机虚拟化平台&a…

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

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

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