zoukankan      html  css  js  c++  java
  • LeetCode191-位1的个数(题目有问题)

    和1做与运算,结果为1的那一位就是1,不断右移

    第一个版本

    public static int hammingWeight(int n) {
            int count = 0;
            while(n!=0){
                if((n&1)==1)
                    count++;
                n=n>>1;
            }
            return count;
        }

    超时了?

     自己输几个用例

    我不懂!题目函数的参数是int,为什么会有这种用例,这不是题目的错误吗。在编辑器里面根本都过不了

    我把里面的n转化成long也不行

    我把函数参数改成long也不行???

    为什么还会显示Integer?

    明明这个时候还是long

     我懂了,应该是java默认输入的参数都是int类型的

     

    服了,这是什么BUG题目,真强

     假如题目是long,那么只要移位即可。使用int毫无意思,java里面没有unsigned int。

    后来想到int的最大值是2147483647,那么2147483649是2147483647+1,用int肯定传不进来的,但是题目模范就是int。

    没法

    2147483647是整数里面最大的,就是0 1111111111111111111111111111111111111111111111111111111111(乱打的1,没数多少)

    那么2147483648就是 0 11111111111111111111111111111 + 1 = 1 000000000000000000000000

    因为最前面的1位是1,所以右移的话,左边是补1的,不会等0,所以导致了前面的超时!

    太恶心了。

    这个时候,1 000000000000000000000 是 -0 就是 0

    这个不是补码,而是乱来

    1 00000000000000000000001 呢 2147483649 要怎么算呢?

    或许能用2147483649 - 2147483647 - 1 ?

    无论怎么算,都没法找到好的方法。

    但是有一种方法可以完美解决这种问题。

    不是用原数据来移位。

    就是改变用来与运算的值。1,10,100,1000,10000 .。。。。。。。。。。。 这样就能不断的从右往左去比较了!

    一开始是负数的情况使用的,后来发现无论是整数还是负数都管用!

    0 11111111111111111111111111111  比如判断第五位 使用 10000 ,只要与运算之后,结果是10000就行了,只关注第五位,其他的不管,就是和

    0 0000000000000000000010000 运算

    public int hammingWeight(int n) {
            int i = 0;
                int test = 1;
                int count = 0;
                while(i<32){
    
                    if((n&test)==test)
                        count++;
    
                    test=test<<1;
                    i++;
    
                }
    
                return count;
        }

    说到底,还是题目的int太恶心了,明明是int是无法通过的,为了不让使用long,就用int来误导别人。

  • 相关阅读:
    React之JSX语法
    Visual Studio Code 使用 Typings 实现智能提示功能
    React.js 之hello word
    Linux命令详解-cd
    Linux命令详解-ls
    linux常用命令
    LINUX系统配置相关
    netsh
    Visual Studio
    乘法算术表
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9457555.html
Copyright © 2011-2022 走看看