2023-09-26每日一题
一、题目编号
2582. 递枕头
二、题目链接
点击跳转到题目位置
三、题目描述
n 个人站成一排,按从 1 到 n 编号。
最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递方向就会改变,队伍会继续沿相反方向传递枕头。
- 例如,当枕头到达第 n 个人时,TA 会将枕头传递给第 n - 1 个人,然后传递给第 n - 2 个人,依此类推。
给你两个正整数 n 和 time ,返回 time 秒后拿着枕头的人的编号。
示例 1:
示例 2:
四、解题代码
class Solution {
public:
int passThePillow(int n, int time) {
int flag = 0;
int t = n - 1;
while(time >= 0){
if(time < t){
if(flag == 0){
return 1 + time;
} else{
return (n - time);
}
}
time -= (t);
flag = (flag + 1) % 2;
}
return 0;
}
};
五、解题思路
(1) 用flag来表示是过去,还是回来。
(2) 一次是n - 1的长度。
(3) time的次数如果在n - 1长度内就可以返回结果了。如果是过去,那么编号就是time+1,如果回来,编号就是n - time,每次减去n - 1步。