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

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

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

  • 示例 1:

输入: n = 5, m = 3
输出: 3

  • 示例 2:

输入: n = 10, m = 17
输出: 2

解题思路

用 f(n, m) 表示从 n 个数中每次删除第 m 个数(共删除了 n - 1 次),最后留下的那个数的序号。

在还没开始删除元素的时候,我们的序号和元素大小应该是一一对应的

元素:
0 1 2 3 4
序号:
0 1 2 3 4

但是在删除第一个元素以后,我们的序号就不一样了,因为我们需要从上一个被删除的元素的下一个作为数组的首部

数字:
0 1 3 4
序号:
2 3 0 1

但是我们发现,删除一个元素后数组的首部元素,就是被删元素的下个元素,被删元素的位置我们可以知道是数组首部开始数起的第m%n个元素,因此如果最后保留在元素在删除数组的序号为f,那么它在原数组的位置就是m%n+f,因为数组是环形数组,所以我们还需要(m%n+f)%n

代码

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

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

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

相关文章

rust 编程入门_面向初学者的Rust –最受欢迎的编程语言入门

rust 编程入门Rust has been voted Stack Overflow’s most loved programming language for five years in a row. This article will tell you why Rust is awesome.Rust已连续五年被评为Stack Overflow最受欢迎的编程语言。 本文将告诉您为什么Rust很棒。 Rust is a system…

【转载】springboot:如何优雅的使用mybatis

这两天启动了一个新项目因为项目组成员一直都使用的是mybatis&#xff0c;虽然个人比较喜欢jpa这种极简的模式&#xff0c;但是为了项目保持统一性技术选型还是定了 mybatis。到网上找了一下关于spring boot和mybatis组合的相关资料&#xff0c;各种各样的形式都有&#xff0c;…

创建react应用程序_通过构建电影搜索应用程序在1小时内了解React

创建react应用程序If youve been meaning to learn React but are unsure of where to start, Scrimbas brand new Build a Movie Search App course is perfect for you! 如果您一直想学习React&#xff0c;但是不确定从哪里开始&#xff0c;那么Scrimba全新的Build a Movie S…

GeoServer自动发布地图服务

1 NetCDF气象文件自动发布案例 GeoServer是一个地理服务器&#xff0c;提供了管理页面进行服务发布&#xff0c;样式&#xff0c;切片&#xff0c;图层预览等一系列操作&#xff0c;但是手动进行页面配置有时并不满足业务需求&#xff0c;所以GeoServer同时提供了丰富的rest接口…

selenium+ python自动化--断言assertpy

前言&#xff1a; 在对登录验证时&#xff0c;不知道为何原因用unittest的断言不成功&#xff0c;就在网上发现这个assertpy&#xff0c;因此做个笔记 准备&#xff1a; pip install assertypy 例子&#xff1a; 1 from assertpy import assert_that2 3 4 def check_login():5 …

11. 盛最多水的容器

11. 盛最多水的容器 给你 n 个非负整数 a1&#xff0c;a2&#xff0c;…&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线&#xff0c;使得它们与 x 轴共同构…

深入理解ES6 pdf

下载地址&#xff1a;网盘下载目录 第1章 块级作用域绑定 1var声明及变量提升&#xff08;Hoisting&#xff09;机制 1块级声明 3-- let声明 3-- 禁止重声明 4-- const声明 4-- 临时死区&#xff08;Temporal Dead Zone&#xff09; 6循环中的块作用域绑定 7-- 循环中的函…

MyBatis之输入与输出(resultType、resultMap)映射

2019独角兽企业重金招聘Python工程师标准>>> 在MyBatis中&#xff0c;我们通过parameterType完成输入映射(指将值映射到sql语句的占位符中&#xff0c;值的类型与dao层响应方法的参数类型一致)&#xff0c;通过resultType完成输出映射(从数据库中输出&#xff0c;通…

2021-08-25556. 下一个更大元素 III

556. 下一个更大元素 III 给你一个正整数 n &#xff0c;请你找出符合条件的最小整数&#xff0c;其由重新排列 n 中存在的每位数字组成&#xff0c;并且其值大于 n 。如果不存在这样的正整数&#xff0c;则返回 -1 。 注意 &#xff0c;返回的整数应当是一个 32 位整数 &…

gradle tool升级到3.0注意事项

Gradle版本升级 其实当AS升级到3.0之后&#xff0c;Gradle Plugin和Gradle不升级也是可以继续使用的&#xff0c;但很多新的特性如&#xff1a;Java8支持、新的依赖匹配机制、AAPT2等新功能都无法正常使用。 Gradle Plugin升级到3.0.0及以上&#xff0c;修改project/build.grad…

如何使用React,TypeScript和React测试库创建出色的用户体验

Im always willing to learn, no matter how much I know. As a software engineer, my thirst for knowledge has increased a lot. I know that I have a lot of things to learn daily.无论我知道多少&#xff0c;我总是愿意学习。 作为软件工程师&#xff0c;我对知识的渴望…

PowerDesigner常用设置

2019独角兽企业重金招聘Python工程师标准>>> 使用powerdesigner进行数据库设计确实方便&#xff0c;以下是一些常用的设置 附加&#xff1a;工具栏不见了 调色板(Palette)快捷工具栏不见了 PowerDesigner 快捷工具栏 palette 不见了&#xff0c;怎么重新打开&#x…

bzoj5090[lydsy11月赛]组题

裸的01分数规划,二分答案,没了. #include<cstdio> #include<algorithm> using namespace std; const int maxn100005; int a[maxn]; double b[maxn]; double c[maxn]; typedef long long ll; ll gcd(ll a,ll b){return (b0)?a:gcd(b,a%b); } int main(){int n,k;s…

797. 所有可能的路径

797. 所有可能的路径 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; 二维数组的第 i 个数组中的单元都表示有向图中 i 号节点所能到达的下一些节点&#…

深入框架本源系列 —— Virtual Dom

该系列会逐步更新&#xff0c;完整的讲解目前主流框架中底层相通的技术&#xff0c;接下来的代码内容都会更新在 这里 为什么需要 Virtual Dom 众所周知&#xff0c;操作 DOM 是很耗费性能的一件事情&#xff0c;既然如此&#xff0c;我们可以考虑通过 JS 对象来模拟 DOM 对象&…

网络工程师常备工具_网络安全工程师应该知道的10种工具

网络工程师常备工具If youre a penetration tester, there are numerous tools you can use to help you accomplish your goals. 如果您是渗透测试人员&#xff0c;则可以使用许多工具来帮助您实现目标。 From scanning to post-exploitation, here are ten tools you must k…

configure: error: You need a C++ compiler for C++ support.

安装pcre包的时候提示缺少c编译器 报错信息如下&#xff1a; configure: error: You need a C compiler for C support. 解决办法&#xff0c;使用yum安装&#xff1a;yum -y install gcc-c 转载于:https://www.cnblogs.com/mkl34367803/p/8428264.html

程序编写经验教训_编写您永远都不会忘记的有效绩效评估的经验教训。

程序编写经验教训This article is intended for two audiences: people who need to write self-evaluations, and people who need to provide feedback to their colleagues. 本文面向两个受众&#xff1a;需要编写自我评估的人员和需要向同事提供反馈的人员。 For the purp…

删除文件及文件夹命令

方法一&#xff1a; echo off ::演示&#xff1a;删除指定路径下指定天数之前&#xff08;以文件的最后修改日期为准&#xff09;的文件。 ::如果演示结果无误&#xff0c;把del前面的echo去掉&#xff0c;即可实现真正删除。 ::本例需要Win2003/Vista/Win7系统自带的forfiles命…

BZOJ 3527: [ZJOI2014]力(FFT)

题意 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下&#xff1a; \[F_j\sum \limits _ {i < j} \frac{q_iq_j}{(i-j)^2}-\sum \limits _{i >j} \frac{q_iq_j}{(i-j)^2}.\] 令\(E_iF_i/q_i\)&#xff0c;求\(E_i\). 题解 一开始没发现求\(E_i\)... 其实题目还更容易想了... …