题目
0,1,…,n-1折n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
分析
方法一
环形链表模拟圆圈的经典解法。
创建一个总共有 n 个结点的环形链表,然后每次在这个链表中删除第 m 个结点。
时间复杂度O(nm),空间复杂度O(n)。
方法二
分析每次被删除的数字的规律并直接计算出圆圈中最后剩下的数字。
f(n,m)={0,n=1(f(n−1,m)+m)%n,n>1
实现
|
|
0,1,…,n-1折n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。
环形链表模拟圆圈的经典解法。
创建一个总共有 n 个结点的环形链表,然后每次在这个链表中删除第 m 个结点。
时间复杂度O(nm),空间复杂度O(n)。
分析每次被删除的数字的规律并直接计算出圆圈中最后剩下的数字。
f(n,m)={0,n=1(f(n−1,m)+m)%n,n>1
|
|