美文网首页
剑指 Offer 第62题:圆圈中最后剩下的数字

剑指 Offer 第62题:圆圈中最后剩下的数字

作者: 放开那个BUG | 来源:发表于2022-08-17 00:15 被阅读0次

1、前言

题目描述

2、思路

如果采用模拟的方法,比如新建链表之类的会超时。

此问题是一个约瑟夫环问题,利用数学手段得到公式为:f(n,m)=[f(n−1,m)+m]%n。

约瑟夫环

每次杀掉一个人,从后面的人开始重新编号,会发现最后的一个人为0。如果从 n = 1 递推,就会发现上面的公式:


公式

3、代码

class Solution {


    public int lastRemaining(int n, int m) {
        int pos = 0;
        for(int i = 2; i <= n; i++){
            pos = (pos + m) % i;
        }
        return pos;
    }
}

相关文章

网友评论

      本文标题:剑指 Offer 第62题:圆圈中最后剩下的数字

      本文链接:https://www.haomeiwen.com/subject/uxobbrtx.html