当前位置:网站首页>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));
}
}
边栏推荐
猜你喜欢

正规方程、、、

Cicflowmeter source code analysis and modification to meet requirements

Go language development environment setup +goland configuration under the latest Windows

5.菜品管理业务开发

机器学习——感知机及K近邻

canvas 绘制图片

indexedDB本地存储,首页优化

uniapp开发微信小程序,显示地图功能,且点击后打开高德或腾讯地图。

Use of vim

Development of anti fleeing marketing software for health products
随机推荐
100 GIS practical application cases (XIV) -arcgis attribute connection and using Excel
队列Queue
How large and medium-sized enterprises build their own monitoring system
tf.errors
Internet of things? Come and see Arduino on the cloud
numpy.linspace()
tf.contrib.layers.batch_norm
How to manage massive network infrastructure?
numpy.logical_and()
p5.js千纸鹤动画背景js特效
Impdp leading schema message ora-31625 exception handling
YOLOv6:又快又准的目标检测框架开源啦
Which of the top ten securities companies has the lowest Commission and is the safest and most reliable? Do you know anything
机器学习——感知机及K近邻
二叉树第一部分
np.float32()
Symbol. Iterator iterator
学习使用KindEditor富文本编辑器,点击上传图片遮罩太大或白屏解决方案
What are the characteristics of EDI local deployment and cloud hosting solutions?
SQL Sever关于like操作符(包括字段数据自动填充空格问题)
