剑指 Offer 62. 圆圈中最后剩下的数字

 

 

这是经典的约瑟夫环问题。

方法一:用链表模拟

用链表模拟整个游戏过程。如果单纯用链表模拟的话,每次需要从1数到m,才能踢除1个数,所以踢除n-1个数一共需要遍历(n-1)*m次,时间复杂度就是O(n*m),这种方法会超时。

 

方法二:数学递推公式

剑指 Offer 62. 圆圈中最后剩下的数字

 

 剑指 Offer 62. 圆圈中最后剩下的数字

 

 剑指 Offer 62. 圆圈中最后剩下的数字

 1 class Solution {
 2 public:
 3     int lastRemaining(int n, int m) {
 4         int f = 0;
 5         for(int i = 2; i <= n; ++i) {
 6             f = (f + m) % i;
 7         }
 8 
 9         return f;
10     }
11 };

 

参考

换个角度举例解决约瑟夫环

相关文章:

  • 2021-06-20
  • 2022-12-23
  • 2021-12-15
  • 2021-11-10
  • 2022-12-23
  • 2021-12-13
  • 2022-12-23
  • 2021-08-03
猜你喜欢
  • 2021-12-30
  • 2021-10-11
  • 2022-02-28
  • 2022-01-24
  • 2022-12-23
  • 2022-12-23
  • 2021-05-13
相关资源
相似解决方案