约瑟夫环经典问题
public static void main(String[] args) {
System.out.println(JSON.toJSON(kingRing(41, 3)));
}
//链表实现-删除效率高-不需要复制或移动元素
public static Integer[] kingRing(int count, int kill) {
Integer[] array = new Integer[Math.min(count, kill - 1)];
int index = 0;
if (count < kill) {
//自增妙用
for (int i = 0; i < count; i++) {
array[index++] = index;
}
}
List<Integer> link = new LinkedList();
for (int j = 0; j < count; j++) {
link.add(j + 1);
}
int number = 0;
int pointer = 0;
while (kill <= link.size()) {
number++;
if (pointer > link.size() - 1) {
pointer = 0;
}
if (number % kill == 0) {
link.remove(pointer);
continue;
}
pointer++;
}
return link.toArray(array);
}
缘于生活,而归于工作。本人所书,而意于分享。
如有转载,请注明出处!
--活出自己范儿

浙公网安备 33010602011771号