劍指Offer-數(shù)組中只出現(xiàn)一次的數(shù)字

題目描述 [數(shù)組中只出現(xiàn)一次的數(shù)字]

一個(gè)整型數(shù)組里除了兩個(gè)數(shù)字之外甲捏,其他的數(shù)字都出現(xiàn)了兩次魁淳。請(qǐng)寫程序找出這兩個(gè)只出現(xiàn)一次的數(shù)字雷袋。

解題思路一

hashmap

代碼

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        unordered_map<int, int> hashmap;
        for(auto num:data)
            hashmap[num]++;

        vector<int> res;
        for(auto it:hashmap){
            if(it.second==1)
                res.push_back(it.first);
        }
        *num1 = res[0];
        *num2 = res[1];
    }
};

解題思路二

轉(zhuǎn)自 https://blog.csdn.net/zh_ang_lei/article/details/50908074

  1. 首先交待一下異或的基本性質(zhì):2個(gè)相同的數(shù)異或等于0哩罪,且異或操作(^)滿足結(jié)合律和交換律呀狼。

  2. 再來(lái)考慮一種簡(jiǎn)單一點(diǎn)的情況:一個(gè)數(shù)組中只有一個(gè)元素出現(xiàn)唯一的一次,而有其他元素都出現(xiàn)2次里烦。那么我們用0依次異或數(shù)組中每一個(gè)元素,得到的就是那個(gè)唯一的元素禁谦。因?yàn)槲覀兛梢岳媒粨Q律和結(jié)合律將相同的元素移動(dòng)到一起胁黑,那么在利用結(jié)合律,相同的元素兩兩先異或州泊,得到0丧蘸,最后得到很多0和唯一的元素異或,所以最終的答案就是那個(gè)唯一的元素遥皂。

  3. 所以力喷,如果我們能把原來(lái)問題中的數(shù)組,分成2個(gè)子數(shù)組演训,使得每個(gè)子數(shù)組中都只有一個(gè)唯一的元素以及很多成對(duì)的元素弟孟,那么我們就可以求出每個(gè)子數(shù)組中唯一的元素,最終就可以得到原數(shù)組中2個(gè)出現(xiàn)次數(shù)唯一的元素样悟。

方法是這樣的:

  • 首先數(shù)組中所有元素依次異或拂募,因?yàn)橄嗤脑禺惢虻玫?庭猩,所以最終的答案就等于那2個(gè)唯一的元素a^b的值。

  • 因?yàn)閍,b不同陈症,所以異或得到的答案肯定是不等于0的蔼水,那么我們就找到a^b的二進(jìn)制表示中第一個(gè)為1的位,假如是第k位录肯。而a,b兩個(gè)數(shù)在第k位上是不同的趴腋,一個(gè)為0,一個(gè)為1

  • 接下來(lái)我們將第k位是1的分成一組论咏,第k位是0的分成一組优炬,如果2個(gè)元素相同,那么他們第k位肯定是一樣的潘靖,所以肯定被分到同一組中穿剖。而a,b則被分到2組中去了。

  • 然后我們就可以在每個(gè)分組中異或每一個(gè)元素卦溢,最終就可以得到那2個(gè)唯一的元素糊余。

代碼

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        int num = data.size();

        int ret = 0;
        for(int i=0; i<num; i++)
            ret ^= data[i];

        //找到第一個(gè)k位
        int pos = 1;
        while(((ret>>pos) & 1) != 1 )
            pos++;

        //將包含num1 and num2 分開
        for(int i=0; i<num; i++)
        {
            if(((data[i]>>pos) & 1) != 1 )
                *num1 ^= data[i];
            else
                *num2 ^= data[i];
        }
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市单寂,隨后出現(xiàn)的幾起案子贬芥,更是在濱河造成了極大的恐慌,老刑警劉巖宣决,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸劈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尊沸,警方通過(guò)查閱死者的電腦和手機(jī)威沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洼专,“玉大人棒掠,你說(shuō)我怎么就攤上這事∑ㄉ蹋” “怎么了烟很?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜡镶。 經(jīng)常有香客問我雾袱,道長(zhǎng),這世上最難降的妖魔是什么官还? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任芹橡,我火速辦了婚禮,結(jié)果婚禮上望伦,老公的妹妹穿的比我還像新娘僻族。我一直安慰自己粘驰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布述么。 她就那樣靜靜地躺著蝌数,像睡著了一般。 火紅的嫁衣襯著肌膚如雪度秘。 梳的紋絲不亂的頭發(fā)上顶伞,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音剑梳,去河邊找鬼唆貌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛垢乙,可吹牛的內(nèi)容都是我干的锨咙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼追逮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酪刀!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钮孵,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骂倘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后巴席,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體历涝,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年漾唉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荧库。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赵刑,死狀恐怖电爹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情料睛,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布摇邦,位于F島的核電站恤煞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏施籍。R本人自食惡果不足惜居扒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丑慎。 院中可真熱鬧喜喂,春花似錦瓤摧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至进副,卻和暖如春这揣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背影斑。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工给赞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矫户。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓片迅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親皆辽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柑蛇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容