390. Elimination Game

来源:互联网 发布:南京瞬联软件科技 编辑:程序博客网 时间:2024/05/16 04:04

刚开始看这道题的时候,没有思路,本打算通过求解前几个数字,得到规律性的结论,失败了。所以打算暴力求解,但估摸着时间复杂度和空间复杂度都非常高,应该AC不了,于是参考了discuss,amazing。。利用了处理完的数组永远是个等差数列的特性,存储开头,步长和长度就可以完全表示一个等差数列了。

class Solution {public:    int lastRemaining(int n) {        int start=1;        int step=1;        int length=n;        bool isLeft=true;        while(length!=1)        {            if((isLeft==true)||(isLeft==false&&(length%2==1)))                start+=step;            step*=2;            length/=2;            isLeft=!isLeft;        }        return start;    }};
0 0
原创粉丝点击