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)
上一篇 2022年6月3日 下午11:36
下一篇 2022年6月3日 下午11:46


相关推荐

  • 教你从零开始画echarts地图

    教你从零开始画echarts地图echarts 地图制作离线地图下载地址 https datav aliyun com tools atlas index htmlecharts 文档地址 https echarts apache org zh option html 基于 VUE 编写 其他框架请自行转换 大同小异基础配置先让地图内容出来 npm 安装步骤省略 请参考官方文档 创建的 div 必须设置宽度和高度 关于图表的宽高自适应 参考我的另一篇文章 template template

    2026年3月26日
    2
  • OpenClaw怎么部署?2026年OpenClaw(原Clawdbot)一键部署,手把手教学

    OpenClaw怎么部署?2026年OpenClaw(原Clawdbot)一键部署,手把手教学

    2026年3月13日
    1
  • executescalar mysql_ExecuteScalar

    executescalar mysql_ExecuteScalar这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

    2022年6月30日
    29
  • Cursor三大模式(Ask、Manual、Agent)进阶教程及功能详解

    Cursor三大模式(Ask、Manual、Agent)进阶教程及功能详解

    2026年3月16日
    2
  • VScode 配置 Java 环境

    VScode 配置 Java 环境VScode 配置 Java 环境 1 VisualStudio 介绍 VisualStudio 简称 VSCode 是 Microsoft 在 2015 年 4 月 30 日 Build 开发者大会上正式宣布一个运行于 MacOSX Windows 和 Linux 之上的 针对于编写现代 Web 和云应用的跨平台源代码编辑器 可在桌面上运行 并且可用于 Windows macOS 和 Linux 它具有对 JavaScript TypeScript 和 Node js 的内置支持 并具有丰富的其他语言 例如

    2025年6月29日
    7
  • 直通线交叉线「建议收藏」

    直通线交叉线「建议收藏」

    2022年6月19日
    34

发表回复

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

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