zoukankan      html  css  js  c++  java
  • Elimination Game题解

    390. Elimination Game题解

    随便写几个小例子查看,发现每次数字个数减少一半,每一层的数之间的间隔相等,然后考虑模拟删除过程,需要记录如下几个变量

    1. 每一层的第一个数
    2. 当前层的数字个数
    3. 当前层每两个数字的间隔
      然后依次模拟删除,当个数只剩一个的时候返回,然后考虑第一个数和个数,以及间隔怎么更新。个数就是除二,间隔就是乘二,
      然后第一个数,当从左边删除的时候,就是上一层的第一个数加上间隔长度,当从右边删除的时候,需要考虑个数的奇偶性,偶数的话,
      跟上一层一致,奇数的话,就是上一层的加上间隔长度,跟从左边更新一致。

    代码如下:

    class Solution {
    public:
         int lastRemaining(int n) {
            if(n == 1) return 1;
            int len = 1;
            bool f = 1;
            int left = 1;
            while(1) {
    
                if(f) {
                    left = left + len;
                } else {
                    if(n & 1) {
                        left = left + len;
                    }
                }
                n /= 2; len *= 2;
                f = !f;
                if(n == 1) return left;
            }
            return 0;
        }
    };
    
  • 相关阅读:
    函数之形参与实参
    函数的介绍与方法
    生活如戏
    zabbix中的sql
    1
    1
    通过snmpwalk抓取设备端口的流量状况
    abc
    as
    网络质量IP获取脚本
  • 原文地址:https://www.cnblogs.com/y119777/p/5818955.html
Copyright © 2011-2022 走看看