题解 | #孩子们的游戏(圆圈中最后剩下的数)#

孩子们的游戏(圆圈中最后剩下的数)

https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6

看题解里面的递归处理,代码极其简单,但实在不好理解,我这个凡人大脑想破了脑袋还是觉得那种方法理解起来有点隔靴搔痒,

所以自己用了以下这种人类大脑的思考方式,来解决;思路就是在数组里来回循环走,每次走m步,找到每次要删除的下标。

import java.util.*;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if (n == 1 || m == 1) {
            return n - 1;
        } else {
            LinkedList<Integer> lli = new LinkedList<>();//把所有的孩子放在链表中
            for (int i = 0; i < n; i++) {
                lli.add(i);
            }
            int step = m;
            int removeindex = 0;//设定要删除的孩子的初始值
            while (lli.size() > 1) {//每次删除一个孩子,直到剩最后一个
                //寻找要删除的孩子的编号,假设总孩子数量是多于m的,那么下一个要删除的编号就是removeindex+step-1
                int nextindex = removeindex + step - 1;
                //若这个编号大于数组最后一个编号的处理(这里要用while不能用if,因为可能不止需要处理一次)
                while (nextindex > lli.size() - 1) {
                    //则多余的从0开始再数nextindex-(lli.size()-1)个,那么此时的下标就是nextindex-(lli.size()-1)-1
                    nextindex = nextindex - lli.size();
                }
                removeindex = nextindex;
                lli.remove(removeindex);
            }
            return lli.get(0);
        }
    }
}

全部评论

相关推荐

07-02 13:52
武汉大学 golang
骗你的不露头也秒
牛客87776816...:😃查看图片
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务