137. Single Number II

題目描述:給一個(gè)整數(shù)數(shù)組,其中除了一個(gè)元素外每個(gè)元素都出現(xiàn)三次,找出這個(gè)只出現(xiàn)一次的元素。要求時(shí)間復(fù)雜度O(n),空間O(1)。

分析:與136題類似的兩個(gè)思路可以找到此數(shù),但分別不滿足時(shí)間和空間復(fù)雜度要求。還是利用位運(yùn)算,但都是奇數(shù)次,不能用異或了。

代碼一:設(shè)一個(gè) sizeof(int) 大小的數(shù)組 cnt ,cnt[i] 表示在 i 位出現(xiàn)1的個(gè)數(shù),若cnt[i]是3的整數(shù)倍則忽略,否則取出該位組成答案。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int n = nums.size();
        int m = sizeof(int) * 8;        //sizeof(int) 是int的字節(jié)數(shù),轉(zhuǎn)換為8個(gè)比特位
        vector<int> cnt(m, 0);
        for (int i = 0; i < n; i ++)
            for (int j = 0; j < m; j++)
            {
                cnt[j] += (nums[i] >> j) & 1;          //取第 i 個(gè)數(shù)的第 j 位
                cnt[j] %= 3;
            }
        int ans = 0;
        for (int j = 0; j < m; j ++)
            ans += (cnt[j] << j);         //不為0的所有位所代表的10進(jìn)制數(shù)的和
        
        return ans;
    }
};

代碼二:one 、two、three 分別記錄到當(dāng)前處理的元素為止,二進(jìn)制 1 分別出現(xiàn) 1、2(mod 3后)次的二進(jìn)制位。當(dāng) one 和two中某一位同時(shí)為1,就表示該二進(jìn)制位上1出現(xiàn)了3次,此時(shí)清零。最終one就是結(jié)果。這是用二進(jìn)制模擬三進(jìn)制運(yùn)算。

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int one = 0, two = 0, three = 0;
        int n = nums.size();
        for (int i = 0; i < n; i ++)
        {
            two |= (one & nums[i]);   //取已經(jīng)出現(xiàn)過(guò)一次1,且當(dāng)前數(shù)該位也為1的位,然后使two的該位置1
            one ^= nums[i];         //記錄mod 3 后的1的個(gè)數(shù)
            three = ~(one & two);         //取one、two同時(shí)為1 的位,再取反用于下一步清零
            one &= three;
            two &= three;
        }
        return one;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、題目 二、解題 需要注意題目的意思是,所有數(shù)都出現(xiàn)了3次,除了一個(gè)(這個(gè)只出現(xiàn)了一次)線性的復(fù)雜度,首先想到的...
    樂(lè)樂(lè)可愛睡覺閱讀 3,634評(píng)論 0 1
  • 由于所有數(shù)字都出現(xiàn)奇數(shù)次,所以無(wú)法直接使用異或操作??紤]到計(jì)算機(jī)使用二進(jìn)制存儲(chǔ)數(shù)字,可以建立一個(gè)32位的數(shù)字,統(tǒng)計(jì)...
    larrymusk閱讀 145評(píng)論 0 0
  • Given an array of integers, every element appears three t...
    exialym閱讀 155評(píng)論 0 0
  • 原文《介紹一種業(yè)余時(shí)間在家就能賺外快的工作》 看完這篇文章,有一句話,覺得很深刻。文字只是表達(dá)的工具,傳遞思想才是...
    果喵閱讀 199評(píng)論 1 1
  • 多年前,我想象多年后的樣子。 而如今的多年后,我依舊是多年前的樣子,而我身邊的人或事,不再同于多年前。 此時(shí),我已...
    李自省閱讀 377評(píng)論 0 0

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