剑指offer-题45:圆圈中最后剩下的数字

原创 2018年04月14日 23:20:43

题目描述

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

实验平台:牛客网


解决思路:

这题用了2种方法解答:第一种是通过链表实现的,用链表模拟一个环形链表,当到达链表末尾的时候,如果没有到达第m个数字,则又从链表的头开始扫描,这种算法的时间复杂度是O(mn);第二种方法是通过数学规律解答的,思路如下图:

这里写图片描述
这里写图片描述
这里写图片描述

方法一:

java:

import java.util.ArrayList;

public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if (n < 1 || m < 1) {
            return -1;
        } else {
            ArrayList<Integer> numList = new ArrayList<Integer>();
            for (int i = 0; i < n; i++) {
                numList.add(new Integer(i));
            }
            int index = 0;
            while (numList.size() > 1) {
                for (int i = 1; i < m; i++) {
                    index++;
                    if (index == numList.size()) {
                        index = 0;
                    }
                }
                if (index == numList.size() - 1) {
                    numList.remove(numList.size() - 1);
                    index = 0;
                } else {
                    numList.remove(index);
                }
            }
            return numList.get(0);
        }
    }
}

方法二:

java:

public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if (n < 1 || m < 1) {
            return -1;
        } else {
            int last = 0;
            for (int i = 2; i <= n; i++) {
                last = (last + m) % i;
            }
            return last;
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang454592297/article/details/79945554

数字成像系统

数字成像系统暨Image signal processor原理培训,涵盖成像系统基础5讲:1. 数字成像系统介绍2. CMOS image sensor基础3. 镜头光学基础4. 颜色科学基础5. ISP 信号处理基础,以及ISP各模块:6.黑电平与线性化7.Green Imbalance8:9.坏点消除等21讲,3A技术以及图像质量评价与调校6讲
  • 2017年10月14日 07:20

面试题45. 圆圈中最后剩下的数字

题目描述 有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列并且不再回到圈中,从他的下一个小朋友开始,继续0…m...
  • u010429424
  • u010429424
  • 2017-06-25 15:29:44
  • 394

剑指Offer面试题45(Java版):圆圈中最后剩下的数字

题目:0,1,,,,,n-1这n 个数字排成一个圆圈,从数字0开始每次从这个圆圈中删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0,1,2,3,4这5个数字组成的一个圆圈,从数字0开始每...
  • jsqfengbao
  • jsqfengbao
  • 2015-08-11 20:08:24
  • 2215

剑指offer 面试题45 圆圈中最后剩下的数字

剑指offer 面试题45 圆圈中最后剩下的数字 题目: 0, 1, 2, …, n-1 这 n 个数字排成一个圆圈,从数字 0 开始每次从这个圆圈里删除第 m 个数字。 ...
  • liyazhou0215
  • liyazhou0215
  • 2017-06-03 21:31:57
  • 588

【剑指offer系列】 圆圈中最后剩下的数字___45

题目描述:   把0 ,1 ,……, n-1这n个数排成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字。   求这个圆圈剩下的最后一个数字      示例:   输入:n=...
  • u012658346
  • u012658346
  • 2016-04-11 19:57:10
  • 595

【剑指Offer学习】【面试题45:圆圈中最后剩下的数字(约瑟夫环问题)】

题目:0, 1, … , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字。求出这个圈圈里剩下的最后一个数字。解题思路第一种:经典的解法, 用环形链表模拟圆圈。创建一个总共有n ...
  • DERRANTCM
  • DERRANTCM
  • 2015-07-08 08:31:41
  • 3017

题目45:圆圈中最后剩下的数字(约瑟夫环)

有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的...
  • bravedence
  • bravedence
  • 2017-09-01 16:20:32
  • 81

剑指offer:圆圈中最后剩下的数字(java)

题目:0,1,,,,,n-1这n 个数字排成一个圆圈,从数字0开始每次从这个圆圈中删除第m个数字。求出这个圆圈里剩下的最后一个数字.     例如,0,1,2,3,4这5个数字组成的一个圆圈,从数字...
  • abc7845129630
  • abc7845129630
  • 2016-10-15 15:02:10
  • 877

剑指Offer面试题45:圆圈中最后剩下的数字

题目:圆圈中最后剩下的数字         0,1,2,3,4……n这n个数字排列成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈最后剩下的一个数字。 算法分析: ...
  • gg543012991
  • gg543012991
  • 2016-10-09 20:59:29
  • 202

【剑指offer-Java版】45圆圈中最后剩下的数字

圆圈中最后剩余的数字:约瑟夫环问题 0-n这n个数字排成一圈,从数字零开始每次从这个圆圈中删除第m个数字,求出剩余的最后一个数字 public class _Q45 { // 低效的模...
  • Sugar_Z_
  • Sugar_Z_
  • 2016-04-27 09:45:59
  • 412
收藏助手
不良信息举报
您举报文章:剑指offer-题45:圆圈中最后剩下的数字
举报原因:
原因补充:

(最多只允许输入30个字)