剑指 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)


相关文章
|
7月前
|
人工智能 Java 大数据
Java程序员真的还有未来吗?如何备战2024春招?并狂拿大厂offer?
Java程序员还有未来吗? 嘿,小伙伴们,你们有没有想过Java程序员还有没有未来? 哈哈,别担心,我这就来给你们答疑解惑! 首先,让我们来看看Java的发展历程。自从Java诞生以来,它就一直是编程界的一颗璀璨明星。从Web应用到企业级应用,再到移动应用,Java无处不在。那么,现在呢?现在,随着人工智能、大数据和云计算的兴起,Java依然发挥着重要的作用。这些领域都需要大量的Java程序员来支持它们的发展。 那么,有人会说:“哎呀,现在出现了那么多新的编程语言和框架,Java程序员会不会被淘汰啊?”哈哈,别担心,Java程序员们!这些新语言和框架的出现并不会让Java消失。相反,它们
139 0
|
7月前
|
NoSQL Dubbo Java
唯品会三年,我只做了5件事,如今跳槽天猫拿下offer(Java岗)
xxx,都是好牌子,天天有三折” 是的,我在这家洗脑广告词公司里工作了整整三年时间,虽然是大家耳熟能详的互联网电商公司,但它的发展同其他新起互联网公司来说局限了很多,同时也早早遇到了瓶颈。好在三年前,我就开始规划了我自己的人生,所以在唯品会的三年时间里,我并未懈怠。
|
6月前
|
Java
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_3_前n个数字二进制形式中1的个数(java)
|
6月前
|
Java
剑指offer_2_二进制加法(java)
剑指offer_2_二进制加法(java)
|
6月前
|
Java
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)
|
7月前
|
存储 安全 Java
剑指offer全集系列Java版本(2)
剑指offer全集系列Java版本(2)
38 0
|
7月前
|
存储 Java
剑指offer全集系列Java版本(1)
剑指offer全集系列Java版本(1)
43 0
|
7月前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
7月前
|
消息中间件 NoSQL Java
读完这些“Java技术栈”,拿下阿里Offer没问题
今天,要分享的这些是非常干货的面试知识,在疫情闭关期间,这些“Java技术栈”读完,斩获offer到手软。
|
7月前
|
Java
小明买了一堆桃子,不知道个数,第一天吃了一半的桃子,还不过瘾,又多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到n天只剩下一个桃子了。问:最开始买了多少桃子。(使用Java实现)
小明买了一堆桃子,不知道个数,第一天吃了一半的桃子,还不过瘾,又多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到n天只剩下一个桃子了。问:最开始买了多少桃子。(使用Java实现)
111 0