题目:0, 1, … , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。
基本思路:创建一个总共有n 个结点的环形链表,然后每次在这个链表中删除第m 个结点。
java实现:
public class LastRemaining {
public static int lastRemaining(int n,int m) {
if(n<1||m<1)
return -1;
List<Integer>list=new LinkedList<>();
for(int i=0;i<n;i++) {
list.add(i);
}
int index=0;
while(list.size()>1) {
// 只要移动m-1次就可以移动到下一个要删除的元素上
for (int i = 1; i < m; i++) {
index = (index + 1) % list.size();
}
list.remove(index);
}
return list.get(0);
}
}