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

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

接上文,我们来讲讲解决方案

方法一:模拟 + 队列

思路和算法

最直观的方法是模拟游戏过程。使用队列存储圈子中的小伙伴编号,初始时将 1 到 n 的所有编号依次加入队列,队首元素即为第 1 名小伙伴的编号。

每一轮游戏中,从当前小伙伴开始数 k 名小伙伴,数到的第 k 名小伙伴离开圈子。模拟游戏过程的做法是,将队首元素取出并将该元素在队尾处重新加入队列,重复该操作 k-1 次,则在 k−1 次操作之后,队首元素即为这一轮中数到的第 k 名小伙伴的编号,将队首元素取出,即为数到的第 k 名小伙伴离开圈子。上述操作之后,新的队首元素即为下一轮游戏的起始小伙伴的编号。

每一轮游戏之后,圈子中减少一名小伙伴,队列中减少一个元素。重复上述过程,直到队列中只剩下 1 个元素,该元素即为获胜的小伙伴的编号。

代码

Python3

class 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]

Java

class Solution { public int findTheWinner(int n, int k) { Queue<Integer> queue = new ArrayDeque<Integer>(); 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) { Queue<int> queue = new Queue<int>(); 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(); } }

C++

class Solution { public: int findTheWinner(int n, int k) { queue<int> 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 个元素。

http://www.jsqmd.com/news/1158001/

相关文章:

  • 2026北京靠谱离婚律师TOP5推荐:股权分割、抚养权及财产保全 - 本地品牌推荐
  • Unity集成C++库:用vcpkg+CMake告别插件集成噩梦
  • 萧邦中国官方售后服务中心网点地址与热线实地考察报告+多信源验证(2026年7月更新) - 萧邦中国官方服务中心
  • CPT外汇:更谨慎的使用者更在意的产品理解成本,这里做个框架归纳
  • BQ25887与STM32G474RE在电池管理系统中的协同设计
  • Noto字体架构设计:多语言排版的无缝解决方案与性能优化策略
  • RSA.js 前端加密逆向实战:3步定位智慧江财登录密码加密逻辑
  • 2026年近期莲花县一站式装修公司选择全攻略 - 品牌鉴赏官2026
  • 2026年国内扎啤杯采购指南:为何龙辉玻璃成为可靠选择? - 品牌鉴赏官2026
  • 宝珀中国官方售后服务中心|服务热线及详细地址权威信息通告(2026年7月最新) - 宝珀官方售后服务中心
  • LangChain v2 DeepAgents流式输出实战:从事件流到商业价值
  • (替换Typora)markdown编辑器使用指南
  • 如何在 MacOS 上安装 Anaconda ?
  • 亲身到店探访合肥亨得利官方名表服务中心|完整维修地址与售后热线(2026年7月更新) - 亨得利官方
  • 2026深圳正规漏水检测维修权威推荐-卫生间漏水免砸砖维修/厨房阳台墙面暗管漏水检测/屋顶外墙堵漏维修-防水补漏公司实测口碑榜推荐 - 即刻修防水
  • bluez 5.50 文件传输排错:3个常见编码与DBUS环境问题定位与修复
  • 2026淄博保险纠纷律师怎么挑?5条经验标准帮您避坑筛选 - 本地品牌推荐
  • 九号控制器二次开发与极飞A12测试实战指南
  • 2026年7月最新南京劳力士官方售后服务网点地址及客服电话一览 - 劳力士官方服务中心
  • 辽宁 CPPM 报名授权(众智商学院)课程中心 - 众智商学院cppm官方
  • Gemini Mac版深度解析:原生屏幕理解与macOS交互范式升级
  • STM32C552定时器输入捕获:频率与占空比精确测量实战指南
  • [开源] 一个能操控你电脑、手机、浏览器的个人 AI 助理
  • 嵌入式Linux NTP客户端实战:STM32 + LwIP 实现毫秒级网络授时
  • 《C++从零打造渲染器》学习笔记 第1讲(上):3D数学基础(上)
  • 2026年当下,河北知名的AI机构如何以GEO搜荐优化重塑企业获客格局 - 品牌鉴赏官2026
  • 2026年粒度分析仪采购渠道推荐,助您精准选择 - 品牌排行榜
  • 泰格豪雅中国官方售后服务中心|地址与客服服务热线权威信息通知(2026年7月最新) - 亨得利官方服务中心
  • 多业务系统并行迁移:架构设计与实施复盘
  • STM32/51单片机蜂鸣器驱动电路对比:ULN2003 vs 三极管,实测功耗与音质差异