一开始看错题的了,我以为唱过歌的孩子还在圈中
假设唱过歌的孩子还在圈中
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
int singed = 0;//有几个小朋友唱过歌
int count = 0;
int i = -1; //当前指向的小朋友
while (true)
{
if (i > n - 1)
i = i-n;
if (singed == n)
return i;
i += 3;
singed++;
}
}
};
下面是正题的回答,面试的时候遇到比较长的题一定要审清题意,不要像我一样
int LastRemaining_Solution(int n, int m)
{
int singed = 0;//有几个小朋友唱过歌
vector<int> visited(n,0);
int count = 0;
int i = 0; //当前指向的小朋友
while (singed<n)
{
if (i == n)
i = 0;
if(visited[i]==0)
count++;
if (count == m)
{
visited[i] = 1;
singed++;
count = 0;
}
i++;
}
return i-1;
}