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

news2024/11/30 14:46:03

文章目录

  • 题目
  • 思考
  • 代码和注释
  • 总结


题目

0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。

例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。

在这里插入图片描述

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思考

著名的约瑟夫环问题:这是大佬的数学解题思路

总体我的理解:留下的num的上一次的下标=(当前index + m) % 上一轮剩余数字的个数

数学解法,O(n)O(n)
这么著名的约瑟夫环问题,是有数学解法的!
因为数据是放在数组里,所以我在数组后面加上了数组的复制,以体现是环状的。我们先忽略图片里的箭头:
【第一轮后面的数字应该是[0, 1, 2 ,3 ,4],手误打错了。。抱歉】
在这里插入图片描述

很明显我们每次删除的是第 mm 个数字,我都标红了。

第一轮是 [0, 1, 2, 3, 4] ,所以是 [0, 1, 2, 3, 4] 这个数组的多个复制。这一轮 2 删除了。

第二轮开始时,从 3 开始,所以是 [3, 4, 0, 1] 这个数组的多个复制。这一轮 0 删除了。

第三轮开始时,从 1 开始,所以是 [1, 3, 4] 这个数组的多个复制。这一轮 4 删除了。

第四轮开始时,还是从 1 开始,所以是 [1, 3] 这个数组的多个复制。这一轮 1 删除了。

最后剩下的数字是 3。

图中的绿色的线指的是新的一轮的开头是怎么指定的,每次都是固定地向前移位 mm 个位置。

然后我们从最后剩下的 3 倒着看,我们可以反向推出这个数字在之前每个轮次的位置。

最后剩下的 3 的下标是 0。

第四轮反推,补上 mm 个位置,然后模上当时的数组大小 22,位置是(0 + 3) % 2 = 1。

第三轮反推,补上 mm 个位置,然后模上当时的数组大小 33,位置是(1 + 3) % 3 = 1。

第二轮反推,补上 mm 个位置,然后模上当时的数组大小 44,位置是(1 + 3) % 4 = 0。

第一轮反推,补上 mm 个位置,然后模上当时的数组大小 55,位置是(0 + 3) % 5 = 3。

所以最终剩下的数字的下标就是3。因为数组是从0开始的,所以最终的答案就是3。

总结一下反推的过程,就是 (当前index + m) % 上一轮剩余数字的个数。

代码和注释

class Solution {
    public int lastRemaining(int n, int m) {
        // ArrayList<Integer> list = new ArrayList<>(n);
        // for (int i = 0; i < n; i++) {
        //     list.add(i);
        // }
        // int idx = 0;
        // while (n > 1) {
        //     idx = (idx + m - 1) % n;
        //     list.remove(idx);
        //     n--;
        // }
        // return list.get(0);

        int idx = 0;
        for(int i = 2; i<=n;i++){
            idx = (idx + m) % i;
        }
        return idx;
    }
}

总结

数学归纳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术创新,她不断进取!冲在前端,开发是她!

单从数字比例上来看&#xff0c;前端开发工程师的女性占比相对整个行业来说较高。成为优秀的前端开发工程师&#xff0c;不论男女&#xff0c;你都可以&#xff01;本期工作坊就想跟你聊聊&#xff0c;想要成为一名优秀的前端开发应该具备怎样的能力&#xff1f;女性的哪些独特…

还在用HttpUtil?SpringBoot 3.0全新HTTP客户端工具来了,用起来够优雅!

我们平时开发项目的时候&#xff0c;经常会需要远程调用下其他服务提供的接口&#xff0c;于是我们会使用一些HTTP工具类比如Hutool提供的HttpUtil。前不久SpringBoot 3.0发布了&#xff0c;出了一个Http Interface的新特性&#xff0c;它允许我们使用声明式服务调用的方式来调…

Grafana 集成 Prometheum

参考文章&#xff1a; linux 上搭建grafana_摸鱼第一人的博客-CSDN博客_linux安装grafana 目录 一、安装 Grafana 二、安装 Prometheus 三、Prometheus 集成 Grafana 一、安装 Grafana 1、从官网下载rpm包 Download Grafana | Grafana Labs 2、将下载好的包上传到linu…

开源博客项目Blog .NET Core源码学习(2:数据库结构分析)

项目采用17张表以支撑博客内容展示及后台管理功能&#xff0c;本文结合数据库表中的存储数据&#xff0c;学习每张表的用途及其中字段的意义&#xff08;有部分字段暂时还不明白&#xff0c;后续学习代码时再逐步完善&#xff09;。 序号表名用途1CategoryInfo保存文章栏目的定…

vulntarget靶场系列-a-writeup

网络配置外网WIN7&#xff1a;ip1: 192.168.127.91/255.255.255.0 ,gw:192.168.127.2 (NAT模式)ip2:10.0.20.98-vmnet1(仅主机模式)域主机成员&#xff1a;10.0.20.99-vmnet1(仅主机模式)10.0.10.111-vmnet2(仅主机模式)域控&#xff1a;10.0.10.110-vmnet2(仅主机模式)密码配置…

C++11标准模板(STL)- 算法(std::max_element)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回范围内的最大元素 st…

2022 12月15日 每日面试题(MyBatis)

&#x1f3e0;个人主页&#xff1a;不会写代码的满满 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是满满&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; 目前状况&#x1f389;&#xff1a;开学即将大三&#xff0c;目标就是半年内找到一份实…

【云计算与大数据技术】资源管理、调度模型策略的讲解

一、资源管理模型 集群资源管理模型通常由两个部分组成&#xff0c;即资源表示模型和资源分配模型&#xff0c;由于这两个部分是耦合的&#xff0c;所有优化集群资源管理时需要同时结合这两个部分考虑&#xff0c;资源表示模型用于描述集群资源的组织方式&#xff0c;是集群资…

【Contrastive Learning:IVIF】

CLF-Net: Contrastive Learning for Infrared and Visible Image Fusion Network &#xff08;LF-Net&#xff1a;红外与可见光图像融合网络的对比学习&#xff09; &#xff08;总结&#xff1a;就是更像谁就选谁&#xff09; 本文提出了一种基于对比学习的红外和可见光图像融…

透过ChatGPT的进化足迹,OpenAI传达了哪些信号?

古希腊神话中&#xff0c;一位名叫赫尔墨斯的神&#xff0c;会充当人神之间的信使&#xff0c;穿着带有双翼的飞鞋&#xff0c;行走在神明与人类之间。根据《荷马史诗》的记载&#xff1a;“在天神中&#xff0c;赫尔墨斯是最喜欢引导凡人前行的。”这句话用来形容OpenAI与AI的…

佳力奇IPO过会:拟募资11亿 西安现代与华控湖北是股东

雷递网 雷建平 12月13日安徽佳力奇先进复合材料科技股份公司&#xff08;简称&#xff1a;“佳力奇”&#xff09;日前IPO过会&#xff0c;准备在深交所创业板上市。佳力奇计划募资11.22亿元&#xff0c;其中&#xff0c;6.2亿元用于先进复合材料数智化生产基地建设项目&#x…

Google Cloud database options (关于GCP数据库怎么选择)

背景 GCP提供了几种您可以从中选择的数据库服务&#xff0c;可是究竟该用哪个呢&#xff1f; Cloud SQL:Cloud Spanner:BigQuery:Cloud Bigtable:Cloud Firestore:Firebase Realtime Database:Cloud Memorystore: from Google Cloud database options sort out by zhengkai.…

【自然语言处理】隐马尔科夫模型【Ⅱ】隐马尔科夫模型概述

有任何的书写错误、排版错误、概念错误等&#xff0c;希望大家包含指正。 由于字数限制&#xff0c;分成六篇博客。 【自然语言处理】隐马尔可夫模型【Ⅰ】马尔可夫模型 【自然语言处理】隐马尔科夫模型【Ⅱ】隐马尔科夫模型概述 【自然语言处理】隐马尔科夫模型【Ⅲ】估计问题…

14、TheFatRat木马生成工具-创建后门或payload

kail攻击主机&#xff1a; Kali 192.168.11.106靶机&#xff1a;windows server 2008 r2 192.168.11.134 x64 32位一、TheFatRat介绍 TheFatRat创建的后门或者payload&#xff0c;可以在Linux&#xff0c;Windows&#xff0c;Mac和Android上等多种平台上执行&#xff0c;可生…

九、JavaScript——数据类型_数值

一、数值 定义及规范&#xff1a; 数值 &#xff08;Number) -在JS中所有的整数和浮点数(小数) 都是Number JS中的数值并不是无限大的&#xff0c;当数值超过一定后会显示近似值&#xff0c;JavaScript表达的最大整数是&#xff1a;9007199254740992 Infinity 是…

设计模式总览——枯燥的知识又增加了

从今天开始呢&#xff0c;阿Q就带大家了解一下 java 的设计模式&#xff0c;并从中选出比较常用的几种设计模式进行总结。首先呢&#xff0c;先给大家说一下设计模式到底是什么。 设计模式 设计模式&#xff08;Design pattern&#xff09;代表了最佳的实践&#xff0c;通常被…

iOS备用机自动充电方案

搬到新加坡以后&#xff0c;我拥有了很多张手机卡&#xff1a;1张国内的电话卡&#xff0c;回国时使用1张新加坡电话卡&#xff0c;本地使用1张马来西亚电话卡&#xff0c;去马来西亚旅行时使用1张英国电话卡&#xff0c;去欧洲旅行时使用相对应的&#xff0c;我需要有备用机来…

DSP篇--C6701功能调试系列之 FLASH测试

目录 1、 FLASH介绍 2、 FLASH功能测试 调试的前期准备可以参考前面的博文&#xff1a;DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 1、 FLASH介绍 FLASH作为EMIF的外设&#xff0c;对其操作就需要根据EMIF相关配置来确定FLASH的地址了。 一般地&#xff…

Django第二天学习记录

1.对于路由配置的正则化补充(re_path的正则匹配) 对于第一天学习的path转换器过于暴力&#xff0c;对于需要匹配的内容不能很精准的进行转换。为了实现精准的字符串匹配规则&#xff0c;因此引入了re_path&#xff08;reg,view,namexxx&#xff09;进行路由规则的精确匹配。 正…

关于云计算的 7 大误区

一直以来&#xff0c;有几个关于云计算的误区四处传播&#xff0c;散布恐惧和不必要的不信任。在使用新技术之前研究新技术并检查事实是很好的。让我们来看看关于云计算的 7 大误区&#xff0c;看看哪些是真的&#xff0c;哪些不是。 1.云迁移可能很麻烦 云迁移包括许多过程&am…