整型陣列裡只出現一次的數字 c語言筆試題

2021-07-13 17:23:37 字數 970 閱讀 5759

找出陣列內只出現一次的數字,是一系列的筆試題,來考察大家對位運算的掌握,下面我們從最簡單的開始來看看吧!

一、題目:乙個整型陣列裡只有乙個數字出現了一次,其餘數字都出現了兩次,請寫程式找出出現了一次的數字。

如:,找出1

看到這個題目時,我們容易想到異或運算的性質。異或運算相同為0,相異為1,則:

a^a = 0; (1)

0^a = a; (2)

a^b^a = b; (3)

通過以上前兩式,以上陣列裡兩兩相同的異或結果為0,0在與只出現一次的那個數字異或就會得到這個數字,你也可以通過3

式想,1^2^1 = 2, 2^2 = 0,0^3 = 3,還是找到了我們想要的數。不管怎麼想,我們都得到統一的思路:將陣列裡面所有的數字異或一遍,最終得到的那個數字就是只出現一次的數。

[c語言**]:

,找出3和4

第一步,將陣列中所有數字異或一遍,得到的結果為兩個只出現一次的數字的異或結果

本題為:0011(3)^(0100)4  =  0111(7)  括號內為十進位制

第二步,在第一步得到的數字的二進位制中找出第乙個為1的位,通過這個位為0或為1,將陣列中的數字分為兩組。這兩個組裡出現一次的兩個數必定不在同一組,兩個相同的數字必定會被分在乙個組。

本題0111最低位就為1,將陣列中最低位為1的放在一組,為0的放在另一組,則3和4必定不在同一組,因為找出的這  個位為1,即3和4 的這一位不同。則一組為:1,1,3 二組:2,2,4

第三步,將兩個組中的所有數字分別異或,就會得到每個組中只出現一次的那個數。(思想同第一題)

本題1^1^3 = 3,2^2^4 = 4,所以就找到了只出現了一次的兩個數。

[c語言**]:

for(i = 0; i>(k-1)) & 1; //arr[i]第k位的值

if(k_bit == 1)

else

}} 大家實現的時候可以根據功能分幾個函式。

謝謝閱讀!!

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...

陣列中只出現一次的數字

來自劍指offer 分析 如果整型陣列中只有乙個數字出現一次,我們只需將陣列中每個元素依次做異或操作,最終就得到了只出現一次的數字。因為自己與自己異或後,結果為0.現在,陣列中有兩個數字只出現一次,上述一次遍歷後將所有元素異或得不到那兩個數字。因此,我們試著將原陣列分成兩個子陣列,使每個子陣列中分別...

陣列中只出現一次的數字

package com.google.android public static void main string args int result new int 2 find data,result for int i result private static void find int dat...