hammingDistance

Hamming Distance

根據位的運算計算得到:
與:0010&0011得到0010;
4&1=0000 0000 0000 0000 0000 0000 0000 0000
或:4|1=0000 0000 0000 0000 0000 0000 0000 1001
異或:5=0000 0000 0000 0101^7=0000 0000 0000 0111 = 0000 0000 0000 0010

想法1
    int num=0;
        if(x<y)
        {
            int temp=x;
            x=std::move(y);
            y=std::move(temp);
        }
        int all=1;
        for (int i = 0; all<=x&&i<=31; i++) {
            if(i==0);
            else
                all=all*2;
            if(((y >> i)&1)!=((x >> i)&1))
            {
                num++;
            }

        }
        return num;

設計初期想要減少for循環,帶入了x<=all的算法,但是大大增加了算法運算時間,再leetcode上面的運行時間爲6ms

想法2

    for (int i = 0; i<=31; i++) {
            if(((y >> i)&1)!=((x >> i)&1))
            {
                num++;
            }
        }

以爲這種方式會比思想1調用速度更慢,沒想到卻比想法1快了3ms。

想法3

        int i=x^y;
        int num=0;
        for(int j=0;j<31;j++)
        {
            if(((i>>j)&1)==1){
                num++;
            }
        }
        return num;

可惜還是3ms

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章