最近在学习算法(第四版),由谢路云翻译的一本经典算法书,打算通过写些博客来做一下笔记。下面给出1.3.37练习题:约瑟夫问题的队列实现代码:
public static void josephus(int length, int target) {
Queue<Integer> josecycle = new Queue<>();
int j = 1;
//将每个序号压入队列中
for (int i = 0; i < length; i++) {
josecycle.enqueue(i);
}
while (josecycle.size() != 1) {
//将序号从队列弹出,如果刚好是目标序号,则只弹出而不压回队列中
if (j == target) {
Integer result = josecycle.dequeue();
System.out.println(result);
j = 1;
} else {
Integer next = josecycle.dequeue();
josecycle.enqueue(next);
j++;
}
}
System.out.println(josecycle.dequeue());
}