约瑟夫环问题
第一种解法:(数学公式法)
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n<1||m<1) return -1;
int last=0;
for(int i=2;i<=n;i++){
last=(last+m)%i;
}
return last;
}
}
第一种解法:(环形链表法)
import java.util.*;
public class Solution {
public int LastRemaining_Solution(int n, int m) {
if(n<1||m<1) return -1;
LinkedList<Integer> list=new LinkedList<Integer>();
for(int i=0;i<n;i++){
list.add(i);
}
int size=list.size();
int index=0;
while(size>1){
list.remove((index+m-1)%size);
index=(index+m-1)%size;
size--;
}
return list.get(0);
}
}