欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指Offer62:圆圈中最后剩下的数字(Java)

程序员文章站 2022-06-17 16:13:17
...

题目描述:
剑指Offer62:圆圈中最后剩下的数字(Java)
解题思路:
    这道题我们可以通过定义一个list集合去解决它。首先我们把所有的元素加入到list集合里,因为题目要求每次从n个数中删除第m个数,假如m是3,n是5,那么第一次删除的就是m-1下标的元素,而第二次删除的就是m-2下标开始数,第3个元素也就是m + m - 1下表的元素,但是因为此时下标已经越界了,此时我们可以通过取余去找到这个元素的下标,但是因为每次都会删除一个元素,n会不断减少,取余时n也要跟着减少才行。当list只剩最后一个,把那个元素取出来即可。

代码实现:

class Solution {
    public int lastRemaining(int n, int m) {
        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < n; i++){
            list.add(i);
        }
        int index = 0, j = 0;
        while(list.size() > 1){
            index = (index + m - 1) % (n - j);
            list.remove((int)index);
            j++;
        }
        return list.get(0);
    }
}

执行结果:
剑指Offer62:圆圈中最后剩下的数字(Java)