Find the Winner of the Circular Game

给一个数组, 是个圈, 里面有n个人编号为[1..n], 每次游戏踢出第k个, 问剩下的标号是多少

这个就模拟一下吧. 我用set标示被踢出的. 然后当set的大小等于n-1 剩下没标到的就是答案.

class Solution {
    public int findTheWinner(int n, int k) {
        if(n == 1)
            return 1; 
        LinkedList<Integer> list = new LinkedList<>();
        Set<Integer> set = new HashSet<>();
        for(int i = 1; i <= n; i++){
            list.addLast(i);
        }
        for(int i = 1; i < n; i++){
            for(int j = 0; j < k;){
                if(!set.contains(list.peek())){
                    j++;
                }
                list.addLast(list.removeFirst());
            }
            set.add(list.getLast());
            if(set.size() == n - 1){
                for(int f = 1; f <= n; f++){
                    if(!set.contains(f))
                        return f;
                }
            }
        }
        return -1;
    }
}