圆圈中最后剩下的数

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

https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=13&&tqId=11199&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

模拟一个环形链表,当报数到m-1的时候,就将对应下标的移除链表,然后继续从0开始报数到m-1,继续移除,知道剩下一个为止

public int LastRemaining_Solution(int n, int m) {
         if(n < 1 || m < 1)
             return -1;
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0; i < n; i++)  list.add(i);

        int pre = 0;  /*从0开始*/
        while(list.size() > 1){
            pre = (pre+m-1)%list.size();   /*在前一个移除数的基础上,报m-1次,就是移除数的下标,用取模模拟环*/
            list.remove(pre);
        }
        return list.get(0);
    }

使用数学规律

public class Solution {
    public int LastRemaining_Solution(int n, int m) {
         if(n < 1 || m < 1)
             return -1;
        int last = 0;
        for(int i = 2; i <= n; i++){
            last = (last+m)%i;
        }
        return last;
    }
}

剑指offer 文章被收录于专栏

为刷过的每一道题都书写一篇题解,便于重复练习~

全部评论

相关推荐

面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务