3178. 找出 K 秒后拿着球的孩子
题目描述
给你两个 正整数 n
和 k
。有 n
个编号从 0
到 n - 1
的孩子按顺序从左到右站成一队。
最初,编号为 0 的孩子拿着一个球,并且向右传球。每过一秒,拿着球的孩子就会将球传给他旁边的孩子。一旦球到达队列的 任一端 ,即编号为 0 的孩子或编号为 n - 1
的孩子处,传球方向就会 反转 。
返回 k
秒后接到球的孩子的编号。
示例 1:
输入:n = 3, k = 5
输出:1
解释:
经过的时间 | 孩子队列 |
---|---|
0 |
[0, 1, 2] |
1 |
[0, 1, 2] |
2 |
[0, 1, 2] |
3 |
[0, 1, 2] |
4 |
[0, 1, 2] |
5 |
[0, 1, 2] |
示例 2:
输入:n = 5, k = 6
输出:2
解释:
经过的时间 | 孩子队列 |
---|---|
0 |
[0, 1, 2, 3, 4] |
1 |
[0, 1, 2, 3, 4] |
2 |
[0, 1, 2, 3, 4] |
3 |
[0, 1, 2, 3, 4] |
4 |
[0, 1, 2, 3, 4] |
5 |
[0, 1, 2, 3, 4] |
6 |
[0, 1, 2, 3, 4] |
示例 3:
输入:n = 4, k = 2
输出:2
解释:
经过的时间 | 孩子队列 |
---|---|
0 |
[0, 1, 2, 3] |
1 |
[0, 1, 2, 3] |
2 |
[0, 1, 2, 3] |
提示:
2 <= n <= 50
1 <= k <= 50
注意:此问题与 2582. 递枕头 一致。
解法
方法一:数学
我们注意到,每一轮有 $n - 1$ 次传递,因此我们可以将 $k$ 对 $n - 1$ 取模,得到 $k$ 在当前轮的传递次数 $mod$,然后我们将 $k$ 除以 $n - 1$,得到当前的轮数 $k$。
接下来我们判断当前的轮数 $k$:
- 如果 $k$ 为奇数,那么当前的传递方向是从队尾到队首,因此会传递到编号为 $n - mod - 1$ 的人手中;
- 如果 $k$ 为偶数,那么当前的传递方向是从队首到队尾,因此会传递到编号为 $mod$ 的人手中。
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
1 2 3 4 |
|
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 |
|