美文网首页
390. Elimination Game

390. Elimination Game

作者: Jeanz | 来源:发表于2017-09-02 08:35 被阅读0次

    There is a list of sorted integers from 1 to n. Starting from left to right, remove the first number and every other number afterward until you reach the end of the list.

    Repeat the previous step again, but this time from right to left, remove the right most number and every other number from the remaining numbers.

    We keep repeating the steps again, alternating left to right and right to left, until a single number remains.

    Find the last number that remains starting with a list of length n.

    Example:

    Input:
    n = 9,
    1 2 3 4 5 6 7 8 9
    2 4 6 8
    2 6
    6
    
    Output:
    6
    

    一刷
    题解:
    给出1...n这n个数字。
    首先从左到右,每隔一个删除一个。然后从右到左,每隔一个删除一个。重复这个过程。返回最后留下的一个元素。
    我们用head表示head现在指向的元素,一次iter之后,(假装移除),那么step会变成之前的两倍。根据这规律保存head, head为最后留存的元素。
    如果是从左到右,head += step;
    如果是从右到左,且size为奇数(为偶数head不变),head+=step;(head被删除)

    class Solution {
        public int lastRemaining(int n) {
            boolean left = true;
            int remaining = n;
            int step = 1;
            int head = 1;
            while(remaining>1){
                if(left || remaining%2 == 1){
                    head = head + step;
                }
                remaining /= 2;
                step = step*2;
                left = !left;
            }
            return head;
        }
    }
    

    相关文章

      网友评论

          本文标题:390. Elimination Game

          本文链接:https://www.haomeiwen.com/subject/glpljxtx.html