0, 1, … , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。
创建一个总共有n 个结点的环形链表,然后每次在这个链表中删除第m 个结点。
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 idx = 0; while (list.size() > 1) { // 只要移动m-1次就可以移动到下一个要删除的元素上 for (int i = 1; i < m; i++) { idx = (idx + 1) % list.size(); } list.remove(idx); } return list.get(0); }
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8