尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

算法题剖析:找出游戏的获胜者(二)
📅 发布时间:2026/7/10 2:24:31

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

方法一:模拟 + 队列

思路和算法

最直观的方法是模拟游戏过程。使用队列存储圈子中的小伙伴编号,初始时将 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 个元素。

相关新闻

  • RSA.js 前端加密逆向实战:3步定位智慧江财登录密码加密逻辑
  • 2026年近期莲花县一站式装修公司选择全攻略 - 品牌鉴赏官2026
  • 2026年国内扎啤杯采购指南:为何龙辉玻璃成为可靠选择? - 品牌鉴赏官2026

最新新闻

  • AI Agent开发实战:从零构建具备自主规划与工具调用能力的智能体
  • AI 辅助技术选型:从问题定义到决策框架的系统化方法
  • Vim编辑器入门:一文看懂底线命令模式基础操作
  • 软件测试面试宝典2026版
  • 2026年合肥废品回收选对=省心 梦源废品回收专业高价上门回收推荐 - 本地品牌推荐
  • PIC32MZ与PAM8904实现智能多级警报系统设计

日新闻

  • OpenClaw本地化部署:xParse文档解析引擎实战指南
  • 蓝牙 5.4 协议栈深度解析:从 HCI 到 L2CAP 的 7 层数据流
  • PyTorch nn.CrossEntropyLoss 实战:3种权重设置与标签平滑对比(附代码)

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号