zoukankan      html  css  js  c++  java
  • [leetcode] 397. Integer Replacement

    我是链接

    这个也是easy,要不就简单除2加上简单减一,然后交了,肯定错了,错在65535上,(这样做是不对的,应该自己多想几组测试用例,充分考虑各种情况后再提交),然后想想,除2是必须做的,然后什么时候加一,什么时候减一,我猜,仅仅是猜测,应该是哪种操作使得变化后的数二进制表示中1的数目最少即可,这样以后只用除2就可以了,然后使用__builtin_popcount函数,然后判断是加一还是减一,然后就过了。

    我还以为没事了,正准备去吃饭了,突然看到update,看到输入3,应该输出2,运行我的程序,居然出错了,然后开始修bug,真是惊心动魄,这次不知道怎么rank,哎!

    int integerReplacement(int a) {
            if(a == 1) return 0;
            if(a == 3) return 2;
            int res = 0;
            long long n = a;
            while(n != 1) {
                if(n == 3) {
                    n = 1;
                    res += 2;
                    continue;
                }
                if(n & 1) {
                    long long a = n + 1, b = n - 1;
                    if(__builtin_popcount(a) > __builtin_popcount(b)) {
                        n = b;
                    } else {
                        n = a;
                    }
    
                } else n >>= 1;
                res++;
            }
            return res;
        }
    
  • 相关阅读:
    属性与字段的区别
    修改LVDS支持1024*600分辨率
    Altium designer 10如何设置标题栏
    嵌入式C开发人员的最好的0x10道笔试题
    进程线程及堆栈关系的总结
    GDB调试
    c语言
    如何使用autotools生成Makefile
    ubuntu NFS
    Ubuntu安装配置TFTP服务
  • 原文地址:https://www.cnblogs.com/y119777/p/5861360.html
Copyright © 2011-2022 走看看