数组模拟队列:
class Solution {
public:
int LastRemaining_Solution(int n, int m)
{
if(m<1||n<1)return -1;
vector<int> vect(n,1);
int i=-1,step=0, count=n;
while(count>0)
{
i++;
if(i>=n)i=0;
if(vect[i]==-1)continue;
step++;
if(step==m)
{
vect[i]=-1;
step=0;
count--;
}
}
return i;
}
};
公式法:
int LastRemaining_Solution(int n, int m)
{
if(n==0) return -1;
int s=0;
for(int i=2;i<=n;i++){
s=(s+m)%i;
}
return s;
}
递归写法
int yuesefu(int n,int m){
if(n == 1){
return 0; //这里返回下标,从0开始,只有一个元素就是剩余的元素0
}
else{
return (yuesefu(n-1,m) + m) % n; //我们传入的n是总共多少个数
}
}