2582. 递枕头

https://leetcode.cn/problems/pass-the-pillow/description/

n 个人站成一排,按从 1n 编号。

最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递方向就会改变,队伍会继续沿相反方向传递枕头。

  • 例如,当枕头到达第 n 个人时,TA 会将枕头传递给第 n - 1 个人,然后传递给第 n - 2 个人,依此类推。

给你两个正整数 ntime ,返回 time 秒后拿着枕头的人的编号。

示例 1:

1
2
3
4
>输入:n = 4, time = 5
>输出:2
>解释:队伍中枕头的传递情况为:1 -> 2 -> 3 -> 4 -> 3 -> 2 。
>5 秒后,枕头传递到第 2 个人手中。

示例 2:

1
2
3
4
>输入:n = 3, time = 2
>输出:3
>解释:队伍中枕头的传递情况为:1 -> 2 -> 3 。
2 秒后,枕头传递到第 3 个人手中。

提示:

  • 2 <= n <= 1000
  • 1 <= time <= 1000

由于两端不占用额外的时间,也就是说 n 个人传递一遍的时间是 n - 1 所以当经过 2(n-1) 时,枕头将再次传回最开始的位置。

  • time < n 时,表示枕头在进行正向传递,位置为 time + 1
  • time >= n 时,表示枕头在进行反向传递,反向传递的次数为 time - (n - 1) ,那么当前的位置就是 n - (time - (n - 1))
1
2
3
4
5
6
class Solution {
public int passThePillow(int n, int time) {
time %= 2 * (n - 1);
return time < n ? 1 + time : n - (time - (n - 1));
}
}
0%