2682.找出转圈游戏输家
题目:
n 个朋友在玩游戏。这些朋友坐成一个圈,按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i + 1) 个朋友的位置(1 <= i < n),而从第 n 个朋友的位置开始顺时针移动 1 步会回到第 1 个朋友的位置。
游戏规则如下:
第 1 个朋友接球。
● 接着,第 1 个朋友将球传给距离他顺时针方向 k 步的朋友。
● 然后,接球的朋友应该把球传给距离他顺时针方向 2 * k 步的朋友。
● 接着,接球的朋友应该把球传给距离他顺时针方向 3 * k 步的朋友,以此类推。
换句话说,在第 i 轮中持有球的那位朋友需要将球传递给距离他顺时针方向 i * k 步的朋友。
当某个朋友第 2 次接到球时,游戏结束。
在整场游戏中没有接到过球的朋友是 输家 。
给你参与游戏的朋友数量 n 和一个整数 k ,请按升序排列返回包含所有输家编号的数组 answer 作为答案。
示例 1:
输入:n = 5, k = 2 输出:[4,5] 解释:以下为游戏进行情况: 1)第 1 个朋友接球,第 1 个朋友将球传给距离他顺时针方向 2 步的玩家 —— 第 3 个朋友。 2)第 3 个朋友将球传给距离他顺时针方向 4 步的玩家 —— 第 2 个朋友。 3)第 2 个朋友将球传给距离他顺时针方向 6 步的玩家 —— 第 3 个朋友。 4)第 3 个朋友接到两次球,游戏结束。
示例 2:
输入:n = 4, k = 4 输出:[2,3,4] 解释:以下为游戏进行情况: 1)第 1 个朋友接球,第 1 个朋友将球传给距离他顺时针方向 4 步的玩家 —— 第 1 个朋友。 2)第 1 个朋友接到两次球,游戏结束。
提示:
● 1 <= k <= n <= 50
时间最短文章来源:https://www.toymoban.com/news/detail-654762.html
/**
* @param {number} n
* @param {number} k
* @return {number[]}
*/
var circularGameLosers = function(n, k) {
//实现声明一个长度为n的数组,并全部填充为false
//用来表示,所有朋友都没有接到球,当有一个朋友接到球时,赋值为true
//但是当这个朋友本身就是true时,结束游戏,并将所有值为false的朋友下标输出
let allF = new Array(n).fill(false);
//将当前第一个朋友下标定位0,一共走了i+=k步
//当allF[j]个朋友本身是true时,终止循环
for (let i = k, j = 0; !allF[j]; i += k) {
//循环到allF[j]个朋友,给他赋值true,下次再循环到他,那么游戏结束
allF[j] = true;
//现在循环到第j个朋友加上k(顺时针多少步),再取余n,除n是获得走了多少圈
j = (j + i) % n;
}
//声明一个数组,用于接收allF内值为false的数组元素
let ans = [];
for (let i = 0; i < n; i++) {
if (!allF[i]) {
//加一是因为我们是从第零个开始
ans.push(i + 1);
}
}
return ans;
}
内存最少文章来源地址https://www.toymoban.com/news/detail-654762.html
/**
* @param {number} n
* @param {number} k
* @return {number[]}
*/
var circularGameLosers = function(n, k) {
// 声明一个set对象
//Set对象是值的集合,你可以按照插入的顺序迭代它的元素。
//Set 中的元素只会出现一次,即 Set 中的元素是唯一的。
//也就是说,可以将接到球的小朋友编号存入set
//因为set值唯一,可以使用set.gas()判断当前小朋友到底接没接到球,如果接到了,那么代表游戏结束
//使用循环遍历,判断set中没有的下标,然后输出
let set = new Set();
let start = 0;
let i = 1;
while (!set.has(start)) {
set.add(start);
start += i * k;
start %= n;
i += 1;
}
let res = [];
for (let i = 0; i < n; i++) {
if (!set.has(i)) res.push(i + 1)
}
return res;
}
到了这里,关于leetcode每日一题_2682.找出转圈游戏输家的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!