下面是我的代码,效率比较低,看别人的答案,总结自己的经验。
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n==0) return -1;
int left=n,current=0,count=0,size=m;
int arr[]=new int[n];
while(left>1){
if(arr[current]==0){
if((count+1)%m==0){
arr[current]=1;
left--;
}
current=(current+1)%n;
count=(count+1)%m;
}else{
current=(current+1)%n;
}
}
int i=0;
while(i<n){
if(arr[i]==0)
break;
i++;
}
return i;
}
}
归根结底是一个约瑟夫环问题,看下面这一篇就够了。