其他分享
首页 > 其他分享> > lc390. 消除游戏

lc390. 消除游戏

作者:互联网

消除游戏

思路

逻辑简单,但是直接模拟实现非常容易超时。
实际实现是不需要真的去模拟删除的过程。通过调整步长step控制来实现删除的。
头尾的数是否要删除就要看头尾的数是否是奇数
(以从前往后顺序为例)

实现

class Solution {
    public int lastRemaining(int n) {
        int flag = 1, k=n, step = 1;
        int begin = 1, end = n;
        
        while(k>1){
            if(flag == 1){
                begin += step;
                // end = (k%2 == 0) ? end : end-step;
            }
            else{
                begin = (k%2 == 0) ? begin : begin+step;
                // end -= step;
            }
            step <<= 1;
            k >>= 1;
            flag ^= 1;
        }
        return begin;
    }
}

标签:begin,end,游戏,k%,int,flag,step,lc390,消除
来源: https://www.cnblogs.com/doglovesfish/p/15759350.html