public int lastRemaining(int n, int m) {
ArrayList<Integer> list = new ArrayList<>(n);
for (int i = 0; i < n; i++) {
list.add(i);
}
int idx = 0;
// while (n > 1) {
// idx = (idx + m - 1) % n;
// list.remove(idx);
// n--;
// }
while (list.size() > 1) {
idx = (idx + m - 1) % list.size();
list.remove(idx);
}
return list.get(0);
}
public int lastRemaining1(int n, int m) {
int ans = 0;
for (int i = 2; i <= n; i++) {
ans = (ans + m) % i;
}
return ans;
}
剑指 Offer 62. 圆圈中最后剩下的数字 约瑟夫环
最新推荐文章于 2022-11-10 17:17:46 发布