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

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

一、题目描述



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

 

限制:

1 <= n <= 10^5

1 <= m <= 10^6


二、思路讲解



如果圆圈中只有一个数字,那么他的下标一定是0;

 

如果圆圈中有两个数字,那么所求数字的下标一定是0+m,如果超出了长度2,那就再%2;


如果圆圈中有三个数字,那么所求数字的下标一定是(0+m)%2 +m,如果超出了长度3,那就再%3

       ……


已经可以看出了,当有n个数字的时候,所求数字f(n)为:

f(n) = (f(n-1) + m) % i


三、Java代码实现



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


四、时空复杂度分析



时间复杂度:O(N)

空间复杂度:O(1)


相关文章
|
4月前
|
人工智能 Java 大数据
Java程序员真的还有未来吗?如何备战2024春招?并狂拿大厂offer?
Java程序员还有未来吗? 嘿,小伙伴们,你们有没有想过Java程序员还有没有未来? 哈哈,别担心,我这就来给你们答疑解惑! 首先,让我们来看看Java的发展历程。自从Java诞生以来,它就一直是编程界的一颗璀璨明星。从Web应用到企业级应用,再到移动应用,Java无处不在。那么,现在呢?现在,随着人工智能、大数据和云计算的兴起,Java依然发挥着重要的作用。这些领域都需要大量的Java程序员来支持它们的发展。 那么,有人会说:“哎呀,现在出现了那么多新的编程语言和框架,Java程序员会不会被淘汰啊?”哈哈,别担心,Java程序员们!这些新语言和框架的出现并不会让Java消失。相反,它们
83 0
|
4月前
|
NoSQL Dubbo Java
唯品会三年,我只做了5件事,如今跳槽天猫拿下offer(Java岗)
xxx,都是好牌子,天天有三折” 是的,我在这家洗脑广告词公司里工作了整整三年时间,虽然是大家耳熟能详的互联网电商公司,但它的发展同其他新起互联网公司来说局限了很多,同时也早早遇到了瓶颈。好在三年前,我就开始规划了我自己的人生,所以在唯品会的三年时间里,我并未懈怠。
|
5月前
|
设计模式 算法 Java
京东Java高开岗三面算法+数据库+设计模式,复习1个月成功拿offer
京东高级java现场三面,包含:算法、数据库、设计模式、java高级等,尾部有最全BAT高级java面试题目和答案福利,想要的就快来领走吧~(领取方式见文末)
|
5月前
|
算法 Java 程序员
火爆Boss直聘的2023最牛字节Java面试手册!助你狂拿千份offer!
当下程序员现状 根据一些调查报告,可以了解到当下程序员的现状。 首先,从年龄分布来看,年轻的程序员占据了主导地位。 30岁以下的开发者占比最高,为81%,而40岁以上的开发者仅占3%。 这意味着,程序员这个行业在一定程度上是年轻化的,同时也面临着一些中年转行或者技术更新换代的问题。 在性别方面,男性程序员的比例在90%以上,女性程序员的比例较低。 这可能和传统观念中将程序员视为男性职业有关。然而,随着技术的普及和女性对计算机科学的兴趣逐渐提高,女性程序员的比例也在逐渐增加。 从职业发展来看,程序员的职业发展相对较慢。 虽然程序员的薪资普遍较高,但是工作压力也很大,需要不断学习和更
93 0
|
4月前
|
消息中间件 NoSQL Java
读完这些“Java技术栈”,拿下阿里Offer没问题
今天,要分享的这些是非常干货的面试知识,在疫情闭关期间,这些“Java技术栈”读完,斩获offer到手软。
|
4月前
|
Java
小明买了一堆桃子,不知道个数,第一天吃了一半的桃子,还不过瘾,又多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到n天只剩下一个桃子了。问:最开始买了多少桃子。(使用Java实现)
小明买了一堆桃子,不知道个数,第一天吃了一半的桃子,还不过瘾,又多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到n天只剩下一个桃子了。问:最开始买了多少桃子。(使用Java实现)
|
4月前
|
SQL Java 关系型数据库
疫情之后,幸获内推,4面京东拿下offer(Java后台研发岗)
在2019年时,就早早生了跳槽的念头,心想着拿完年终奖就要开始“跑路”,但万万没想到过完春节之后竟被疫情耽搁了这么久,导致很多互联网公司的招聘都往后一拖再拖。幸运的是,刚复工之后,就收到了朋友的消息,有京东内推的机会,问我要不要试一试,虽然说之前的目标是BAT,但根据自己目前情况来说,可能拿个京东也算是不错了,于是着手准备起来。
|
4月前
|
NoSQL 安全 Java
三面阿里被挂,竟获内推名额,历经5面拿下口碑offer(Java后台)
每一个互联网人心中都有一个大厂梦,百度、阿里巴巴、腾讯是很多互联网人梦寐以求的地方,而我也不例外。但是,BAT等一线互联网大厂并不是想进就能够进的,它对人才的技术能力和学历都是有一定要求的,所以除了学历以外,我们的技术和能力都要过硬才行。
|
4月前
|
安全 NoSQL Java
从安卓转到Java开发,我吃透了这份pdf,终于4面拿下美团offer
先说说个人情况吧,坐标广州,16年从一所普通二本大学毕业,毕业后在一家小公司干android开发,年薪在15w左右。转Java的契机是认识到了一个朋友,做Java后台的,经常跟他聊相关的内容,经过慎重考虑及个人的发展规划,所以就决定转型了。
|
4月前
|
NoSQL 安全 Java
差点跳起来了!全靠这份999页Java面试宝典,我刚拿到美团offer
事情是这样的,今年年初,在某个大博主那里拿到一份Java面试宝典,然后就一直躺在盘里吃灰,直到5月份的时候,有了要跳槽的计划和打算,就想着要刷刷面试题,所以就把这套“积灰”的面试宝典拿出看了看,这一看就看了一个多月才算是完整的吃透。7月中旬开始面试美团了,前后差不多5面的样子,原本以为没啥希望,等到月底29号收到了offer,通知8月3号到公司报到,看到邮件那一刻差点跳起来了!