wordpress关键字查询,厦门seo小谢,广东建设监理网站,青岛手机网站设计公司2682.找出转圈游戏输家 题目: n 个朋友在玩游戏。这些朋友坐成一个圈#xff0c;按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置#xff08;1 i n#xff09;#xff0c;而从第 n 个朋友的位置开始顺时针移…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
时间最短
/*** 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,一共走了ik步//当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;
}内存最少
/*** 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;
}