二進(jìn)制數(shù)運算 - LC136 Single Number

開始看這道題,先想到的是存儲所有數(shù)字和出現(xiàn)的次數(shù)然后找到唯一的那個數(shù)字。
接著想到可以先排序,比較一下奇偶是否相等,于是有了這樣的解法

    public int singleNumber(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length -1;
        for(int i = 0; i < n; i+= 2){
            if( nums[i] != nums[i+1]) return nums[i];
        }
        return nums.length%2 == 0 ? 0 : nums[n];
    }

可是仔細(xì)回憶,總覺得還有最理想的方法,畢竟在找對稱數(shù)字字符串的時候有用到二進(jìn)制數(shù)字的32個位標(biāo)志(a -> z)字母是否出現(xiàn)過。最后搜索了一下其他二進(jìn)制的算法和參考了大家分享,才知道想起還有異或運算。不得不提醒,int在java里面是用32位二進(jìn)制表示的。 基礎(chǔ)類型轉(zhuǎn)換參考

    public int singleNumber(int[] nums) {
        int x = 0;
        for(int i:nums) x ^= i;
        return x;
    }

說到這里,必須要復(fù)習(xí)一下二進(jìn)制數(shù)的基本運算了。

//或
1010 & 0101 == 0000 
1100 & 0110 == 0100
//與
1010 | 0101 == 1111
1100 | 0110 == 1110
//取反
~1111 == 0000
~0011 == 1100
//異或(相同得1,不同得0)
1010 ^ 0101 == 1111
1100 ^ 0110 == 1010

二進(jìn)制運算參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容