美文网首页
约瑟夫环

约瑟夫环

作者: 安然_fc00 | 来源:发表于2017-03-24 22:17 被阅读0次

公式法循环

class Solution {
public:
    int LastRemaining_Solution(int n, int m)
    {
        if(n<1 || m<1)
            return -1;
        int s=0;
        for(int i=2;i<=n;i++)
        {
            s=(s+m)%i;
        }
        
        return s;
    }
};

公式法递归

class Solution {
public:
    int LastRemaining_Solution(int n, int m)
    {
        if(n<1 || m<1)
            return -1;
        if(n==1)    return 0;
        else return (LastRemaining_Solution(n-1,m)+m)%n;
    }
};

链表法

class Solution {
public:
    int LastRemaining_Solution(int n, int m)
    {
        if( n<1 || m <1 )//判断边界条件
            return -1;
         
        list<int> number;
        for(int i=0;i<n;i++)//初始化链表
        {
            number.push_back(i);
        }
        list<int>::iterator current = number.begin();
         
        while(number.size()>1)
        {
            for(int i=1;i<m;i++)//找到第m个结点,记住是循环m-1次而不是m次
            {
                current++;
                if(current == number.end())
                    current = number.begin();
            }
             
            list<int>::iterator next = ++current;//保存删除后的起始结点
            if(next == number.end())
                next = number.begin();
             
            current--;
            number.erase(current);
            current = next;
        }
         
        return *current;
    }
};

相关文章

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 循环单链表实现约瑟夫环(C语言)

    约瑟夫环

  • 约瑟夫环

    题目:100名学生围成一个圈, 编号从1到100,从第一名学生开始报数,从1-9报数 每报出9就退出,直到所有学生...

  • 约瑟夫环

  • 约瑟夫环

    问题:1~n个人围成一圈,从1开始报数,每次数到m这个人就出列,问最后剩下的是几号? 做法:递归。 假设剩下的是f...

  • 约瑟夫环

    解法一 用一个list模拟删除过程 解法二 数学公式,推到过程还没看懂

  • 约瑟夫环

    之前去面试的时候遇到这个问题,作为一只算法渣渣,自然带着恐惧的心情,然后自己瞎捣鼓了好长时间终于拼凑出来了一个很菜...

  • 约瑟夫环

  • 约瑟夫环

    复习一下关于约瑟夫环的实现原理: 如果用C来写的话,也会有许多的方法,比如1:采用链表(双向链表)2:递归3:队列...

  • 约瑟夫环

    公式法循环 公式法递归 链表法

网友评论

      本文标题:约瑟夫环

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