1.数组模拟环:
2.链表实现:
public int LastRemaining_Solution(int n, int m) {
// 使用LinkedList模拟,排除一个删一个
LinkedList<Integer> list = new LinkedList();
for(int i = 1; i <= n; i++) {
list.add(i);
}
int count = 0; // 计数
for(int index = 0; list.size() > 1; index++) {
count++;
index = index == list.size() ? 0 : index;
if(count % m == 0) {
list.remove(index);
index--;
}
}
return index;
}
3.映射分析法
public static int lastRemaining2(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;
}