题解 | #孩子们的游戏(圆圈中最后剩下的数) 一个新的思路~#

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

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

约瑟夫环的核心问题:从被删除的下一个下标开始计数可以转化成 从0开始计数加上上次删除的下标数

import java.util.*;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        if(n==0){
            return -1;
        }else if(n==1){
            return 0;
        }
        //记忆初始数字
        int k = m;
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<n;i++){
            list.add(i);
        }
        while(list.size()!=1){
            //获取这次删除的下标
            int del = m%list.size()-1;
            //恢复原来的数字
            m=k;
            if(del<0){
                del+=list.size();
            }
            //记忆这次删除的下标数,从下一个下标开始计数可以转化成从0开始计数加上上次删除的下标
            m+=del;
            list.remove(del);
        }
        return list.get(0);
    }
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务