有 n 个人组成一个环,他们的编号为 0 ~ n - 1,数组 people 按升序记录编号。他们轮流报数,每次喊到 k 的倍数的人出去,需要返回出组顺序。
示例:
输入:people = [0,3,1,2,4], k = 3
输出:[1,0,4,3,2]
解释:
第一次,值为 1 的人喊到了 3,剩余 [0,3,2,4], 从 2 继续开始。
第二次,值为 0 的人喊到了 6,剩余 [3,2,4], 从 3 继续开始。
第三次,值为 4 的人喊到了 9,剩余 [3,2], 从 3 继续开始。
第四次,值为 3 的人喊到了 12,剩余 [2], 从 2 继续开始。
第五次,值为 2 的人喊到了 15,剩余 [2], 结果为 [0,3,1,2,4]。
class Solution {
public:
vector<int> Joseph_circle(vector<int>& people, int k) {
int kk=1; //报数
int siz = people.size();
vector<int> ans; // 结果
auto p=people.begin();
while(!people.empty())
{
if(p==people.end())
{
p=people.begin();
}
if(kk%k!=0)
{
p++;
}
else
{
ans.push_back(*p);
people.erase(p);
}
kk++;
}
for(int v : ans)
{
cout<<v<<",";
}
cout<<endl;
return ans;
}
};