当前位置: 首页 > news >正文

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

摘要

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

一、约瑟夫环解析

题目中的要求可以表述为:给定一个长度为 n 的序列,每次向后数 m 个元素并删除,那么最终留下的是第几个元素?这个问题很难快速给出答案。但是同时也要看到,这个问题似乎有拆分为较小子问题的潜质:如果我们知道对于一个长度n - 1 的序列,留下的是第几个元素,那么我们就可以由此计算出长度为 n 的序列的答案。

我们将上述问题建模为函数 f(n, m),该函数的返回值为最终留下的元素的序号。

首先,长度为n的序列会先删除第m% n 个元素,然后剩下一个长度为n - 1的序列。那么,我们可以递归地求解 f(n - 1, m),就可以知道对于剩下的 n - 1 个元素,最终会留下第几个元素,我们设答案为 x = f(n - 1, m)。

由于我们删除了第 m % n 个元素,将序列的长度变为 n - 1。当我们知道了 f(n - 1, m) 对应的答案 x 之后,我们也就可以知道,长度为 n 的序列最后一个删除的元素,应当是从 m % n 开始数的第 x 个元素。因此有 f(n, m) = (m % n + x) % n = (m + x) % n。

我们递归计算 f(n, m), f(n - 1, m), f(n - 2, m), ... 直到递归的终点 f(1, m)。当序列长度为 1 时,一定会留下唯一的那个元素,它的编号为 0。

class Solution {public int lastRemaining(int n, int m) {return f(n, m);}public int f(int n, int m) {if (n == 1) {return 0;}int x = f(n - 1, m);return (m + x) % n;}
}

复杂度分析

  • 时间复杂度:O(n),需要求解的函数值有n个。
  • 空间复杂度:O(n),函数的递归深度为n,需要使用 O(n)的栈空间。

二、数学 + 迭代

class Solution {public int lastRemaining(int n, int m) {int f = 0;for (int i = 2; i != n + 1; ++i) {f = (m + f) % i;}return f;}
}

复杂度分析

  • 时间复杂度:O(n),需要求解的函数值有n个。

  • 空间复杂度:O(1),只使用常数个变量。

博文参考

《leetcode》

相关文章:

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

摘要 剑指 Offer 62. 圆圈中最后剩下的数字 一、约瑟夫环解析 题目中的要求可以表述为:给定一个长度为 n 的序列,每次向后数 m 个元素并删除,那么最终留下的是第几个元素?这个问题很难快速给出答案。但是同时也要看到&#xff…...

概率论小课堂:高斯分布(正确认识大概率事件)

文章目录 引言I 预备知识1.1 正态分布1.2 置信度1.3 风险II 均值、标准差和发生概率三者的关系。2.1 “三∑原则”2.2 二班成绩比一班好的可能性2.3 减小标准差引言 泊松分布描述的是概率非常小的情况下的统计规律性。学习高斯分布来正确认识大概率事件,随机变量均值的差异和偶…...

剑指 Offer 43. 1~n 整数中 1 出现的次数

摘要 剑指 Offer 43. 1~n 整数中 1 出现的次数 一、数学思维解析 将1~ n的个位、十位、百位、...的1出现次数相加,即为1出现的总次数。 设数字n是个x位数,记n的第i位为ni​,则可将n写为 nxnx−1⋯n2n1: 称" …...

如何成为程序员中的牛人/高手?

目录 一、牛人是怎么成为牛人的? 二、关于牛人的一点看法 三、让程序员与业务接壤,在开发团队中“升级” 四、使用低代码平台 目标效果 五、最后 祝伟大的程序员们梦想成真、码到成功! 一、牛人是怎么成为牛人的? 最近在某…...

云原生时代顶流消息中间件Apache Pulsar部署实操之轻量级计算框架

文章目录Pulsar Functions(轻量级计算框架)基础定义工作流程函数运行时处理保证和订阅类型窗口函数定义窗口类型滚动窗口滑动窗口函数配置函数示例有状态函数示例窗口函数示例自定义函数开发定义原生语言接口示例Pulsar函数SDK示例Pulsar Functions(轻量级计算框架) 基础定义 …...

数据结构刷题(十九):77组合、216组合总和III

1.组合题目链接过程图:先从集合中取一个数,再依次从剩余数中取k-1个数。思路:回溯算法。使用回溯三部曲进行解题:递归函数的返回值以及参数:n,k,startIndex(记录每次循环集合从哪里开始遍历的位…...

PyQt 做美*女GIF设置桌面,每天都很爱~

人生苦短,我用python 要说程序员工作的最大压力不是来自于工作本身, 而是来自于需要不断学习才能更好地完成工作, 因为程序员工作中面对的编程语言是在不断更新的, 同时还要学习熟悉其他语言来提升竞争力… 好了,学习…...

[渗透测试笔记] 54.日薪2k的蓝队hw中级定级必备笔记系列篇3之域渗透黄金票据和白银票据

前文链接 [渗透测试笔记] 52.告别初级,日薪2k的蓝队hw中级定级必备笔记 [渗透测试笔记] 53.日薪2k的蓝队hw中级定级必备笔记2 文章目录 Kerberos认证协议NTLM认证协议Kerberos和NTLM比较黄金票据原理黄金票据条件复现过程白银票据原理白银票据条件复现过程黄金票据和白银票据…...

【异常】Spring Cloud Gateway网关自定义过滤器无法获取到请求体body的内容?不存在的!

一、需求说明 项目要使用到网关SpringCloud Gateway进行验签,现在定义了一个过滤器ValidateSignFilter, 我希望,所以过网关SpringCloud Gateway的请求,都能够校验一下请求头,看看是否有Sign这个字段放在请求头中。 二、异常说明 但是,我遇到了SpringCloud Gateway网关…...

CNN 卷积神经网络对染色血液细胞分类(blood-cells)

目录 1. 介绍 2. 加载数据 3. 可视化 3.1 显示单幅图像 3.2 显示多幅图像...

Kubernetes学习(三)Service

Service对象 为什么需要Service 每个Pod都有自己的IP地址,但是在Deployment中,在同一时刻运行的Pod集合可能与稍后运行该应用程序的Pod集合不同。 这就导致了一个问题:如果一组Pod(称为后端)为集群内其他Pod&#x…...

数学小课堂:古德-图灵折扣估计法和插值法(防范黑天鹅事件的方法)

文章目录 引言I 黑天鹅事件产生的原因1.1 置信度1.2 数据的稀疏性1.3 零概率问题II 防范黑天鹅事件的方法2.1 古德-图灵折扣估计法2.2 插值法引言 防范黑天鹅事件的方法 古德-图灵折扣估计法:它主要是解决零概率的事件古德的方法虽然解决了零概率的问题,但是依然没有解决数据…...

redis getshell方法

前言 参考文章 https://paper.seebug.org/1169 https://blog.csdn.net/weixin_55843787/article/details/123829606 https://blog.csdn.net/chenglanqi6606/article/details/100909518 Redis是什么 Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构 …...

【ONE·C || 程序编译简述】

总言 C语言:程序编译相关。    文章目录总言1、程序的翻译环境和运行环境1.1、简述1.2、翻译环境:程序编译与链接1.2.1、简介:程序如何从.c文件形成.exe可执行程序1.2.2、过程说明1.3、运行环境2、预处理详解2.1、预定义符号2.2、#define2.…...

MGAT: Multimodal Graph Attention Network for Recommendation

模型总览如下: 图1:多模态图注意力网络背景:本论文是对MMGCN(Wei et al., 2019)的改进。MMGCN简单地在并行交互图上使用GNN,平等地对待从所有邻居传播的信息,无法自适应地捕获用户偏好。 MMGCN…...

在SNAP中用sentinel-1数据做InSAR测量,以门源地震为例

在SNAP中用sentinel-1数据做InSAR0 写在前面1 数据下载2 处理步骤2.1 split2.2 apply orbit 导入精密轨道2.3 查看数据的时空基线base line2.4 back-geocoding 配准2.5 Enhanced Spectral Diversity2.6 Deburst2.7 Interogram Formation 生成干涉图2.8 Multilook 多视2.9 Golds…...

MySQL常用函数

什么是函数? 函数是指一段可以直接被另一段程序调用的程序或代码。 字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接,将S1,S2,… Sn拼接成一个字符串LOWER(str)将字符串str全部转为小写LOWER(str)将字符串str全部转为小写LPAD(…...

51单片机数字电子钟开题报告

目录 选题背景 初步设计方案 芯片的选型 编译环境 关键问题 策略 方案 参考文献 选题背景 数字电子钟是一种受到越来越多人喜爱的钟表,其准确性和稳定性成为设计和研发的重要考虑因素。在现代社会,时间的准确性对于各行各业都非常重要&#xff0…...

day7 HTTP协议

HTTP协议 什么是协议? 协议实际上是某些人,或者某些组织提前制定好的一套规范,大家都按照这个规范来,这样可以做到沟通无障碍。协议就是一套规范,就是一套标准。由其他人或其他组织来负责制定的。我说的话你能听懂&…...

3DCAT+一汽奥迪:共建线上个性化订车实时云渲染方案

近年来,随着5G网络和云计算技术的不断发展,交互式3D实时云看车正在成为一种新的看车方式。与传统的到4S店实地考察不同,消费者可以足不出户,通过网络与终端设备即可实现全方位展示、自选汽车配色、模拟效果、快捷选车并进行个性化…...

别再死记硬背了!用Python的Scipy库5分钟搞定CDF计算与可视化

别再死记硬背了!用Python的Scipy库5分钟搞定CDF计算与可视化 每次看到统计学教材里那些复杂的概率公式,是不是觉得头大?作为数据分析新手,你可能更关心如何快速解决问题,而不是推导数学定理。今天我们就用Python的scip…...

计算机毕业设计springboot基于Java的在线考试系统的设计与实现 基于SpringBoot框架的高校智能组卷与在线评测平台开发 Java Web环境下交互式数字化考核系统的设计与构建

计算机毕业设计springboot基于Java的在线考试系统的设计与实现06kank22 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着教育信息化进程的不断深入,传统纸质考试模…...

Ollama部署本地大模型高可靠性方案:DeepSeek-R1-Distill-Qwen-7B 7B版健康检查与自动重启

Ollama部署本地大模型高可靠性方案:DeepSeek-R1-Distill-Qwen-7B 7B版健康检查与自动重启 1. 引言:为什么需要高可靠性部署? 把大模型部署到本地,就像在家里养了一只聪明的“数字宠物”。它能帮你写文章、解答问题、甚至陪你聊天…...

零基础如何成为AI产品经理?从零到高薪!3步拿下字节跳动AI产品经理Offer,附大厂真实JD拆解

在AI浪潮席卷各行各业的今天,AI产品经理已成为最炙手可热的职业之一。据行业数据显示,2026年1-2月新发AI岗位量同比增长约12倍,AI产品经理平均月薪突破6万元,薪资普遍在30K-60K之间。本文将从岗位认知、技能要求、学习路径、招聘市…...

一文看懂推荐系统:特征交叉02:从FM到DeepFM,看高阶特征交叉的演进之路

1. FM模型:特征交叉的奠基者 第一次接触FM(Factorization Machines)模型时,我被它的简洁优雅震惊了。这个2010年提出的模型,用现在眼光看依然充满智慧。它的核心思想很简单:用向量内积代替交叉特征权重。听…...

DataHub GraphQL API终极指南:30分钟掌握现代数据栈的元数据查询神器

DataHub GraphQL API终极指南:30分钟掌握现代数据栈的元数据查询神器 【免费下载链接】datahub The Metadata Platform for the Modern Data Stack 项目地址: https://gitcode.com/GitHub_Trending/da/datahub 你是不是经常为数据资产的管理而头疼&#xff1…...

突破设备限制:如何用Equalizer APO实现专业级音效

突破设备限制:如何用Equalizer APO实现专业级音效 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 当你花费数千元购买的耳机却无法展现应有的音质,或笔记本内置扬声器播放音乐时…...

请求转发vs重定向、同源策略与跨域

在Java Web开发和前端交互中,请求转发、重定向与跨域问题是高频考点,也是实际开发中不可或缺的知识点。本文结合表格对比、实例说明,完整梳理三者的逻辑、差异及实用解决方案,帮大家分清易混淆概念,高效应对开发中的相…...

3分钟激活微信消息自动转发:零门槛配置实现跨群智能流转

3分钟激活微信消息自动转发:零门槛配置实现跨群智能流转 【免费下载链接】wechat-forwarding 在微信群之间转发消息 项目地址: https://gitcode.com/gh_mirrors/we/wechat-forwarding 在信息爆炸的今天,微信群消息的高效管理成为团队协作的关键。…...

新手快速上手Python:Miniconda-Python3.10镜像部署全流程解析

新手快速上手Python:Miniconda-Python3.10镜像部署全流程解析 1. 为什么选择Miniconda-Python3.10 Python作为当下最流行的编程语言之一,以其简洁易读的语法和丰富的生态系统著称。但对于新手来说,环境配置往往是第一个拦路虎。Miniconda-P…...