Elimination Game

来源:互联网 发布:大神小的知错了微盘 编辑:程序博客网 时间:2024/05/29 18:14

Elimination Game

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 92 4 6 82 66Output:6
解析:每次删除一遍时,相邻两个数的差值变成原来的2倍,从前向后删除时,第一个数字被删除,从后向前删除时,当前为奇数个数字第一个数字被删除,否则不被删除,以此来求最后剩余的第一个数字。

代码:

class Solution {public:    int lastRemaining(int n) {                        int begin=1;        int cha=1;        int num=n;              while(num)        {            if (num==1) return begin;            begin+=cha;            num/=2;            if (num==1) return begin;            cha*=2;            if (num%2)            {                begin+=cha;            }            num/=2;            cha*=2;        }    }};



0 0