zoukankan      html  css  js  c++  java
  • 剑指46.孩子们的游戏(圆圈中最后剩下的数字)

    题目描述

    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下最后一个小朋友,可以不用表演,并且拿到牛客名贵的“名侦探柯南”典藏版(名额有限哦!!^_^)。请你试着想下,哪个小朋友会得到这份礼品呢?(注:小朋友的编号是从0到n-1)
     
    如果没有小朋友,请返回-1
     

    举个栗子

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

    思路

    本题是约瑟夫环问题,有两种解法:

    思路1:链表模拟。没必要用循环链表,可以用链表存放数据,考虑到边界更改取值实现循环 或者 每次对长度取余实现循环

               将所有数字放入LinkedList链表中(ArrayList基于动态数组,它的删除性能并不好,LinkedList比ArrayList更适合增删操作)。假设当前删除的结点下标为removeIndex,则下一个要删除的结点的下标为:(removeIndex+m-1)%list.size(),通过取余符号可以实现类型循环的操作。

    思路2:数学公式。

     

    ☆☆☆解法1

    import java.util.*;
    public class Solution {
        public int LastRemaining_Solution(int n, int m) {
            if (n < 1 || m < 1)
                return -1;
            LinkedList<Integer> list = new LinkedList<>();
            for (int i = 0; i < n; i++) {
                list.add(i);
            }
            // 方法1:
            /*int cur = -1;
            while (list.size() > 1){
                for (int j = 0; j < m; j++) {
                    cur++;
                    if (cur == list.size()){
                        cur = 0;
                    }
                }
                list.remove(cur);
                cur--; // 回退一步,因为新的list中cur指向了下一个元素。
            }*/
            // 方法2
            int removeIndex = 0;
            while(list.size() > 1){
                removeIndex = (removeIndex + m - 1) % list.size();
                list.remove(removeIndex);
            }
            return list.get(0);
        }
    }

    解法2

    M,以后补上。

     
     
    参考:
     
  • 相关阅读:
    [ Algorithm ] N次方算法 N Square 动态规划解决
    [ Algorithm ] LCS 算法 动态规划解决
    sql server全文索引使用中的小坑
    关于join时显示no join predicate的那点事
    使用scvmm 2012的动态优化管理群集资源
    附加数据库后无法创建发布,error 2812 解决
    浅谈Virtual Machine Manager(SCVMM 2012) cluster 过载状态检测算法
    windows 2012 r2下安装sharepoint 2013错误解决
    sql server 2012 数据引擎任务调度算法解析(下)
    sql server 2012 数据引擎任务调度算法解析(上)
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/13569701.html
Copyright © 2011-2022 走看看