圆圈中最后剩下的数字

class Solution {
    public int lastRemaining(int n, int m) {
        //模拟法超时
        int pos = 0;//长度为1时候安全的下标
        //反推的过程
        //从i-1个人到i人的安全序号的变化
        //正过程:
        //1、下标为j+1的成为数组头,j前面的人加在数组尾
        //2、删除下标为j的人
        //恢复
        //1、补充删除的元素
        //2、数组下标右移(会越界所以取模)
    
        for(int i=2;i<=n;i++)
        pos = (pos+m)%i;
        return pos;
    }
}

posted @ 2020-07-24 18:17  浅滩浅  阅读(99)  评论(0编辑  收藏  举报