python约瑟夫环「建议收藏」

python约瑟夫环「建议收藏」第一次出队的那个人的编号是(m-1)%n,第二次重新开始的编号是m%n约瑟夫环是一个经典的数学问题,我们不难发现这样的依次报数,似乎有规律可循。为了方便导出递推式,我们重新定义一下题目。 问题: N个人编号为1,2,……,N,依次报数,每报到M时,杀掉那个人,求最后胜利者的编号。这边我们先把结论抛出了。之后带领大家一步一步的理解这个公式是什么来的。 一般解法找到出列的人,把它删…

大家好,又见面了,我是你们的朋友全栈君。

第一次出队的那个人的编号是( m-1)%n ,第二次重新开始的编号是m%n

约瑟夫环是一个经典的数学问题,我们不难发现这样的依次报数,似乎有规律可循。为了方便导出递推式,我们重新定义一下题目。 
问题: N个人编号为1,2,……,N,依次报数,每报到M时,杀掉那个人,求最后胜利者的编号。

这边我们先把结论抛出了。之后带领大家一步一步的理解这个公式是什么来的。 

一般解法

找到出列的人,把它删掉。这个人的编号是(m-1)%n,m是报数,n是总的人数

时间复杂度是O(nm)
递推公式: 

f(N,M)=(f(N−1,M)+M)%N

  • f(N,M)表示,N个人报数,每报到M时杀掉那个人,最终胜利者的编号
  • f(N−1,M)表示,N-1个人报数,每报到M时杀掉那个人,最终胜利者的编号

公式理解:

python约瑟夫环「建议收藏」

python 代码:

# -*- coding:utf-8 -*-
class Solution:
    def LastRemaining_Solution(self, n, m):
        # write code here
        # 用列表来模拟环,新建列表range(n),是n个小朋友的编号
        if not n or not m:
            return -1
        lis = range(n)
        i = 0
        while len(lis)>1:
            i = (m-1 + i)%len(lis) # 递推公式
            lis.pop(i)
        return lis[0]

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136192.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java数据库查询类建议收藏

    通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。类的代码:1packagecom.hongyuan.db;23importjava.math.BigDecimal

    2021年12月20日
    48
  • 数据库泄密 事件_数据库的安全性

    数据库泄密 事件_数据库的安全性知道CSDN用户数据库泄露这件事情是在12月21日晚上八九点的时候,那时候正在整理第二天报告要用到的思维导图,大奎告诉我说CSDN的用户密码都被泄露了,刚开始还不相信,不过当我从网上下载CSDN数据库文件,并看到自己的账户和密码时,我信了,并且心惊了一下,本来想着对自己的密码立刻进行修改,但网站采取了紧急措施,关闭了相应的功能,或许是为了防止别人恶意修改吧.       此次事件在互联网上

    2026年1月26日
    5
  • pycharm崩溃_pubg lite手机闪退报错

    pycharm崩溃_pubg lite手机闪退报错问题描述今天在用pycharm跑模型时,突然报错自OutofMemoryThereisnotenoughmemorytoperformtherequestedoperation.Pleaseincrease‘Xmx’settingandrestarttheIDEforchangetotakeeffect.解决方案找到pycharm安装目录bin下的pycharm64.exe.vmoptions,用记事本打开将前两个适当加大找到bin目录下的P

    2022年8月26日
    7
  • SqlTransaction 数据库编程事务使用示例

    SqlTransaction 数据库编程事务使用示例在提交或回滚SqlTransaction时,应始终使用Try/Catch进行异常处理。如果连接终止或事务已在服务器上回滚,则Commit和Rollback都会生成InvalidOperationException。 下面的示例创建一个SqlConnection和一个SqlTransaction。此示例还演示如何使用BeginTransaction、Commit和…

    2022年5月23日
    32
  • linux里chmod_linux常用的20个命令

    linux里chmod_linux常用的20个命令linux中chmod命令的使用方法发布时间:2020-06-2417:05:24来源:亿速云阅读:79作者:元一这篇文章运用简单易懂的例子给大家介绍linux中chmod命令的使用方法,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。chmod介绍:linux中可以使用命令chmod来为文件或目录赋予权限。Linux/Unix的档案存取权限分为三级:档案拥有者、群组、其…

    2022年10月20日
    6
  • JMeter性能测试之相关术语及性能测试通过标准

    JMeter性能测试之相关术语及性能测试通过标准

    2021年7月13日
    103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号