前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >孩子们的游戏(圆圈中最后剩下的数)_46

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

作者头像
名字是乱打的
发布2021-12-23 18:28:06
2070
发布2021-12-23 18:28:06
举报
文章被收录于专栏:软件工程

思路: 用链表模拟约瑟夫环,每次要删除的地方应该是当前索引加上要走的步数,由于我们不要转n圈,所以这可以对链表长度取余,1圈内就找到要删除的位置;

代码语言:javascript
复制
 public int LastRemaining_Solution(int n, int m) {
        if (n<=0||m<0){
            return -1;
        }
        //list模拟约瑟夫环
        LinkedList<Integer> list= new LinkedList();
        for (int i = 0; i < n; i++) {
            list.add(i);
        }

        int currStartIndex=0;
        while (list.size()>1){
            int removeIndex=(currStartIndex+m-1)%list.size();
            list.remove(removeIndex);
            currStartIndex=removeIndex%list.size();
        }
        return list.peek();
    }

优化: 由于我们模拟的是一个环,其实这次删除的位置会被环的下一个位置代替,所以从环上看这次要删除的位置就是下一次要删除的位置

代码语言:javascript
复制
public int LastRemaining_Solution(int n, int m) {
        if (n<=0||m<0){
            return -1;
        }
        //list模拟约瑟夫环
        LinkedList<Integer> list= new LinkedList();
        for (int i = 0; i < n; i++) {
            list.add(i);
        }

        int currStartIndex=0;
        while (list.size()>1){
            currStartIndex=(currStartIndex+m-1)%list.size();
            list.remove(currStartIndex);
        }
        return list.peek();
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/5/12 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档