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