62_剑指offer_java_圆圈中的最后一个数字

牛客网剑指offer——Java题解.pdf 立即下载

目录

题目描述

测试用例

题目考点

解题思路


题目描述

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

约瑟夫环问题

 

测试用例

  • 功能测试(输入的m小于n,比如从最初有5个数字的圆圈中每次删除第2、3个数字;输入的m大于或者等于n,比如从最初有6个数字的圆圈中每次删除第6、7个数字)
  • 特殊输入测试(圆圈中有0个数字)
  • 性能测试(从最初有400个数字的圆圈中每次删除第997个数字)

 

题目考点

  • 考察应聘者的抽象建模能力。
  • 考察应聘者对环形链表的理解及应用能力。
  • 考察应聘者的数学功底及逻辑思维能力。

 

解题思路

解题思路一:利用链表(可以模拟的)来循环遍历

解题思路二:利用数学推导出一个递归公式,见书本。这里就不展示了。

 

 

import java.util.ArrayList;

public class Solution {
    // 环形链表
    
    public int LastRemaining_Solution(int n, int m) {
        // 异常
        if(n < 0 || m < 1){
            return -1;
        }
        
        // 初始化标号
        ArrayList<Integer> cir = new ArrayList<>();
        for(int i = 0; i < n; ++i){
            cir.add(i);
        }
        
        int currentIndex = 0;
        while(cir.size() > 1){
            
            // 走m-1步
            for(int i = 0; i < m -1; ++i ){
                currentIndex++;
                // 走到边界
                if(currentIndex == cir.size()){
                    // 回到链表头
                    currentIndex = 0;
                }
            }
            // 删除
            cir.remove(currentIndex);
            if (currentIndex > cir.size() - 1) {
                currentIndex = 0;
            }
        }
        
        return cir.get(currentIndex);
    }
}

 

 

 

 

《剑指offer》Java基础-反射篇.pdf Java基础 反射篇 反射的思想及作用 反射的基本使用 获取类的 Class 对象 构造类的实例化对象 获取一个类的所有信息 获取类中的变量(Field) 获取类中的方法(Method) 获取类的构造器(Constructor) 获取注解 通过反射调用方法 反射的应用场景 Spring 的 IOC 容器 反射 + 抽象工厂模式 JDBC 加载数据库驱动类 反射的优势及缺陷 增加程序的灵活性 破坏类的封装性 性能损耗 反射基础篇文末总结 立即下载

相关推荐

《剑指Offer》题目及Java版代码(带目录)

最全的《剑指offer》Java版代码实现,带目录高清完整版,保证正确性,全都在OJ上测试AC了。

150页的剑指Offer解答PDF,它来了!!!

它来了!!! 终于整理出了第一版剑指Offer的PDF,主要以Java语言为主,一共67道题,100多页。 领取方式如下(无套路直接获取百度网盘的 ???? 链接,如果链接失效可以直接找我): 【秦怀杂货店】公众号内发送:剑指Offer 刷题仓库:CodeSolution ,具体的分类如下: 数组 剑指Offer(二)–二维数组中的查找 剑指Offer(十三)–调整数组顺序使奇数位于偶数前面 剑指Offer(十九)-- 顺时针打印矩阵 剑指Offer(二十八)-- 数组中次数出现超过一半的数字 剑指

秦怀杂货店 6976

剑指offer题解(Java版)

剑指offer题解,使用Java实现,整理自牛客网,QQ交流群:419927514

剑指Java面试:面试官能问到的问题,都被我收集在这份PDF文档里

拿到这个PDF之后,面试官所问到的知识点相信你都能答得上来!我自己靠着这一份PDF拿下了BAT+网易 美团等offer~希望你在拿到之后也能好好学习!面经中有他的知识点的答案,如下图示例,非常详细(文末有领取方式)!!!1.数据结构与算法篇你是java开发你就用java代码去实现个人觉得作为一名程序员,如果没有对数据结构与算法有深刻的认知,是无法成为一名优秀工程师,更别说架构师、技术专家。虽然平时写业务代码,有各种各样的内置函数库、开源类库、开源框架可以使用,满足日常需求自然没什么问题,但是!

m0_73311735的博客 253

《剑指offer》Java版代码

最全的《剑指offer》Java版代码实现,保证正确性,全都在OJ上测试AC了。

《剑指Offer》题目及代码.pdf

该资源为pdf格式java版剑指offer,内容清晰;希望该资源可以帮助到大家学习,拿到理想工作offer。

【剑指offer】剑指OFFER 名企面试官精讲典型编程题 第2版

面试题1:赋值运算符函数 题目:如下为类型CMy|String的声明,请为该类型添加赋值运算符函数 class CMyString { public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString(void); private: char* pData; }; 当面试官要求应聘者定义一个赋值运算符函数时,他会检查应聘者写出的代码时关注如下几点: (1)是否把返回值的类型声

StudyWinter的博客 913

FPGA驱动OV5640:从SCCB协议到图像数据采集的实战解析

本文详细解析了使用FPGA驱动OV5640摄像头模组的完整流程,从SCCB协议通信、寄存器配置到图像数据采集。重点阐述了SCCB(与I2C类似)协议的实现细节、关键的上电复位时序,以及如何通过状态机解析视频流时序并捕获图像数据,为嵌入式视觉开发提供了实战指南。

weixin_29191761的博客 187

剑指offer之JAVA版---史上最全

1.单例模式 Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if (uniqueInstance == null) ,并且此时 uniqueInstance 为 null,那么会有多个线程执行 uniqueInstance = new Singleton(); 语句,这将导致实例化多次 uniqueIns

Amber8080的博客 1803

中国境内及周边2839个站点的日降水量逐日降水数据集(1961-2022,0.1°/0.25°/0.5°)1、数据年份:1961-2022,日数据2、数据范围:中国境内及周边2839个站点的日降

CHM_PRE数据集基于中国境内及周边1961至今共2839个站点的日降水观测,在传统的“降水背景场+ 降水比值场”的数据集构建思路上,尝试应用月值降水约束和地形特征校正,并依据中国范围内约4万个高密度站点2015–2019年的日降水量插值后数据进行精度评价。

yushibing717的博客 2787

SAP子公司财务账套配置实战:从公司代码到记账期间变式的关键步骤

本文详细介绍了为SAP子公司快速配置财务账套的实战步骤。通过复用母公司成熟配置,重点阐述了从创建公司代码、关联控制范围到分配记账期间变式的核心流程,帮助顾问在一两个小时内完成核心骨架搭建,实现高效集团财务管控。

cake8的博客 165

[剑指offer] JAVA版题解(完整版)

本文首发于我的个人博客:尾尾部落 序号 题解 牛客 OJ 数据结构类型 03 [剑指offer] 二维数组中的查找 二维数组中的查找 数组 04 [剑指offer] 替换空格 替换空格 字符串 05 [剑指offer] 从尾到头打印链表 从尾到头打印链表 链表 06 [剑指offer] 重建二...

尾尾部落 6万+

使用petalinux做嵌入式设计开发(1)

1.创建vivado工程,建立硬件环境,最终导出hdf文件 既可以在windows系统下的vivado上编写硬件工程并导出hdf文件,也可以在linux系统下的vivado中编写硬件工程并导出hdf文件。(对于windows系统下导出的hdf文件还需要传递到linux系统下的文件夹中。) 2.以hdf硬件文件为基础创建,配置,编译,打包petalinux工程,导出linux系统所需镜像文件。 具体步骤: (0)设置环境变量 设置环境变量使得我们可以直接使用petalin...

plotup的博客 2076

(数学) 剑指 Offer 62. 圆圈中最后剩下的数字 ——【Leetcode每日一题】

约瑟夫环——公式法(递推公式)

weixin_43412762的博客 704

嵌入式系统中的轻量级压缩实践——miniLZO在STM32上的性能优化

本文深入探讨了miniLZO轻量级压缩算法在STM32嵌入式系统中的性能优化实践。通过对比无损压缩算法的性能特点,详细解析了miniLZO在内存占用、压缩速度方面的优势,并提供了STM32移植、参数调优及创新应用案例,帮助开发者在资源受限环境中实现高效数据压缩。

weixin_30776273的博客 84

某盾blackBox逆向——纯算

某盾blackBox逆向——纯算

Lzyydsb的博客 5891

Java详解剑指offer面试题62--圆圈中最后剩下的数字

Java详解剑指offer面试题62–圆圈中最后剩下的数字 0, 1, 2…,n - 1这n个数字排成一个圆圈,一开始从数字0开始,从这个圆圈里删除第m个数字;然后从被删除的数字后一位开始计数,继续删除第m个数字…重复这个过程,直到最后只剩一个数字为止。求出这个圆圈里剩下的最后一个数字。 用环形链表模拟圆圈 比较直观的思路就是模拟游戏的过程,题目中说到圆圈而且要经常删除元素,因此容易想到用环形链表,但是Java内置的数据结构中没有环形链表,那么只好当遍历到链表末尾时转到链表头部。 举个简单的例子{0,

快乐李同学的博客 709

Tiktok/抖音旋转验证码

主要记录一下旋转验证码的逆向思路

记录一些web逆向的过程 5970

剑指 Offer 62. 圆圈中最后剩下的数字 (约瑟夫环)

LeetCode - 剑指 Offer 62. 圆圈中最后剩下的数字题目描述解题分析code总结 参考题解 by leetcode- Vancomycin 题目描述 难度:简单 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 示例 1: 输入: n =

zy的博客 789

国网DLT698.45协议——采集系统、数据交换(三)

物理层规定了通信单元或其他终端设备与多功能电表的通信接口,接口的物理与电气特性。常见的物理层传输方式有对于RS485、红外、载波通信等通信信道。将数据包装成可传输的帧格式。1、根据通信配置参数完成端口的初始化配置,通信状态初始化为准备接收状态,初始化相关计数器及缓冲区指针。2、链路层及控制子模块负责通信数据的收发控制,各类超时问题的处理。无通信数据接收时,定时初始化通信端口。3、完成协议帧的解析及应答。

一个bug是bug,多个bug能work 8050

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode) 总共n个数字,最后剩下一个数字,所以要进行n-1次删除。 用数组来模拟,进行倒推,假设活下来的人为 v: 当只剩下 v 的时候,数组只有一个元素,v下标只能是0 当剩下两个人(x和v,X不用管是谁,反正V在两个人里面)的时候,此时这两个人的下标有两种可能:x = 0, v = 1或者x = 1, v = 0,但是只有一种可能是v活下去的,这种可能中v的下标应该为:(0+m)%2。假设m = 3,那么v的下标必须为1才能活下去。

zj 155

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

剑指Offer45--面试题62. 圆圈中最后剩下的数字

剑指Offer44--面试题62. 圆圈中最后剩下的数字题目描述使用ArrayList数学方法(迭代与递归) 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个

zhangyunpeng0922的博客 214

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【刷题】2021最新剑指Offer汇总

新手村 关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里

瑞新の博客:bennyrhys 6299

java求最后一位不为0的数字_【Java】 剑指offer(62) 圆圈中最后剩下的数字

本文参考自《剑指offer》一书,代码采用Java语言。题目0, 1, …, n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。思路方法一:采用链表来存放数据,每次对长度取余来实现循环将所有数字放入LinkedList链表中(LinkedList比ArrayList更适合增删操作)。假设当前删除的结点下标为removeIndex,则下一个要...

weixin_28968285的博客 537

剑指offer--Java实现

剑指offer合辑之面试01-67 《剑指offer》面试题 Java 代码的 Github 地址 《剑指offer》面试题 Markdown 版本,包含题目、分析及代码的 Github 地址 面试题2 实现单例模式 面试题3 二维数组中的查找 面试题4 替换空格 面试题5 从尾到头打印链表 面试题6 重建二叉树 面试题7 用两个栈实现队列 面试题8 旋转数组的最小数字 面试题9 斐波那契数列...

LYZ 4109

《剑指offer》面试题62:圆圈中最后剩下的数字

题目:0,1,2…n-1这n个数字拍成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字,求剩下的最后一个数字。例如0,1,2,3,4这5个数字组成的圈,每次删除第3个数字,一次删除2,0,4,1,因此最后剩下的是3。 思路: 最直接的思路是用环形链表模拟圆圈,通过模拟删除过程,可以得到最后剩下的数字,那么这道题目就变成了删除链表中某一个节点。假设总节点数为n,删除一个节点需要走m步,那么这种...

qq_43502142的博客 327
上一篇: 网络协议
下一篇: 剑指offer-Java版本汇总
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值