码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫环问题

时间:2021-04-12 12:42:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:load   remove   溢出   tps   game   style   防止   mic   loading   

约瑟夫环

题目:

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

5727. 找出游戏的获胜者

1、数学解法就是通过倒推,求出队伍长度为n时,(n=1)的下标会变成什么。

class Solution {
    public int lastRemaining(int n, int m) {
        int ans = 0;//这个就是最后只留一人时,他的下标,队伍长为1时,下标为0
        //我们开始倒推出当队伍长度为n时,这个人的下标,
        for (int i = 2; i <= n; i++) {//从2开始,2到n指的是队列的长度
            ans = (ans + m) % i;//因为每次都会固定前移m,是它成为队首,防止溢出再取余
                   //移动其实就是一开始从队首开始后移了m个,现在移回去m个,就可以变成队首,然后是环要取余,也不用改变别的值
} return ans; } }

技术图片

 

 @Sweetiee??的小号   的图片

2、模拟

class Solution {
    public int lastRemaining(int n, int m) {
        ArrayList<Integer> que = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            que.add(i);//先把每个人的下标存进去
        }
        int start = 0;
        while (que.size() > 1) {
            //找到下一次的抛弃位置
            int id = (start + m - 1) % list.size();
            //id=start+m-1 是因为他们之间间隔了m个
            //id-start+1=len->id=len+start-1 m就是这里的len    
            list.remove(id);//把该位置上的数移除
            start = id;//因为移除了一个前面的数,后面的数下标前移1,所以还是id,更新它
        }
        return list.get(0);
    }
}

 

约瑟夫环问题

标签:load   remove   溢出   tps   game   style   防止   mic   loading   

原文地址:https://www.cnblogs.com/MYstery9293/p/14643845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!