当前位置:网站首页>leetCode-1823: 找出游戏的获胜者
leetCode-1823: 找出游戏的获胜者
2022-06-24 09:43:00 【文丑颜不良啊】
题目描述
共有 n 名小伙伴一起做游戏。小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号。确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i < n ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。
游戏遵循如下规则:
从第 1 名小伙伴所在位置开始 。
沿着顺时针方向数 k 名小伙伴,计数时需要包含起始时的那位小伙伴。逐个绕圈进行计数,一些小伙伴可能会被数过不止一次。
你数到的最后一名小伙伴需要离开圈子,并视作输掉游戏。
如果圈子中仍然有不止一名小伙伴,从刚刚输掉的小伙伴的 顺时针下一位小伙伴开始,回到步骤 2 继续执行。
否则,圈子中最后一名小伙伴赢得游戏。
给你参与游戏的小伙伴总数 n ,和一个整数 k ,返回游戏的获胜者。
示例
示例 1:
输入:n = 5, k = 2
输出:3
解释:游戏运行步骤如下:
- 从小伙伴 1 开始。
- 顺时针数 2 名小伙伴,也就是小伙伴 1 和 2 。
- 小伙伴 2 离开圈子。下一次从小伙伴 3 开始。
- 顺时针数 2 名小伙伴,也就是小伙伴 3 和 4 。
- 小伙伴 4 离开圈子。下一次从小伙伴 5 开始。
- 顺时针数 2 名小伙伴,也就是小伙伴 5 和 1 。
- 小伙伴 1 离开圈子。下一次从小伙伴 3 开始。
- 顺时针数 2 名小伙伴,也就是小伙伴 3 和 5 。
- 小伙伴 5 离开圈子。只剩下小伙伴 3 。所以小伙伴 3 是游戏的获胜者。
示例 2:
输入:n = 6, k = 5
输出:1
解释:小伙伴离开圈子的顺序:5、4、6、2、3 。小伙伴 1 是游戏的获胜者。
解题过程
思路及步骤
(1)典型的约瑟夫环的问题,可以认为是一个头尾闭合的循环队列;
(2)先将 n 个小伙伴按照 1 --> n 的顺序入队,队头元素为 1,队尾元素为 5;
(3)循环遍历队列,先将队头元素出队,判断当前计数器是否等于 0,若不等于 0,说明该位置的小伙伴需要参与下次计数,则将该小伙伴入队,即插入到队尾;若计数器等于 0,则说明该位置的小伙伴已经输了,需要离开圈子,同时将计数器重置为 k;
(4)每次循环需要将计数器减 1,而且需要特别注意的是必须得先对计数器进行减 1 操作,也就是前置的 --;
(5)当队列中只剩一个元素时停止循环,返回当前队头元素即可。
代码展示
public class FindTheWinner {
public int findTheWinner(int n, int k) {
// 初始化队列
Queue<Integer> queue = new LinkedList<>();
for(int i = 1; i <= n; ++i) {
queue.add(i);
}
// 计数器
int tmp = k;
// 剩余1位小伙伴则停止循环
while (queue.size() > 1) {
int num = queue.poll();
if (--tmp != 0){
// 不是当次的输家,从新入队
queue.add(num);
} else {
// 重置计数器
tmp = k;
}
}
return queue.peek();
}
public static void main(String[] args) {
FindTheWinner findTheWinner = new FindTheWinner();
System.out.println(findTheWinner.findTheWinner(5, 2));
}
}
边栏推荐
猜你喜欢
随机推荐
Binary tree part I
canvas管道动画js特效
Internet of things? Come and see Arduino on the cloud
静态链接库和动态链接库的区别
415 binary tree (144. preorder traversal of binary tree, 145. postorder traversal of binary tree, 94. inorder traversal of binary tree)
Top issue tpami 2022! Behavior recognition based on different data modes: a recent review
Observer mode
YOLOv6:又快又准的目标检测框架开源啦
数组无缝滚动demo
2021-08-17
自定义kindeditor编辑器的工具栏,items即去除不必要的工具栏或者保留部分工具栏
SVG+js拖拽滑块圆形进度条
js代理模式
Troubleshooting steps for Oracle pool connection request timeout
Detailed explanation of PHP singleton mode
Safety and food security for teachers and students of the trapped Yingxi middle school
Recursive traversal of 414 binary tree
上升的气泡canvas破碎动画js特效
SQL Sever关于like操作符(包括字段数据自动填充空格问题)
SQL Server AVG function rounding









