c 筆試,求陣列中出現奇數次的2個數

2021-05-31 21:24:52 字數 573 閱讀 9334

題:有n+2個數,n個數出現了偶數次,2個數出現了奇數次(這兩個數不相等),問用o(1)的空間複雜度,找出這兩個數,不需要知道具體位置,只需要知道這兩個值。

求解:如果只有乙個數出現過奇數次,這個就比較好求解了,直接將陣列中的元素進行異或,異或的結果

就是只出現過奇數次的那個數。

但是題目中有2個數出現了奇數次?,求解方法如下:

假設這兩個數為a,b,將陣列中所有元素異或結果x=a^b,判斷x中位為1的位數(注:因為a!=b,所以x!=0,我們只需知道某乙個位為1的位數k,例如0010 1100,我們可取k=2或者3,或者5),然後將x與陣列中第k位為1的數進行異或,異或結果就是a,b中乙個,然後用x異或,就可以求出另外乙個。

為什麼呢?因為x中第k位為1表示a或b中有乙個數的第k位也為1,假設為a,我們將x與陣列中第k位為1的數進行異或時,也即將x與a外加其他第k位為1的出現過偶數次的數進行異或,化簡即為x與a異或,結果是b。

**如下:

void getnum(int a,int length)

for(int i=0;i>k)&1)//將s與陣列中第k位為1的數異或

{ cout<

找出陣列中出現奇數次的元素 1個或2個

1.題目 給定乙個含有n個元素的整型陣列arr,其中只有乙個元素出現奇數次,其餘的都出現偶數次,找出這個元素。思路 我們基本上都知道計算機的位運算,其中有乙個異或運算 對於任意乙個數k,k k 0,k 0 k,所以我們只需要將arr中所有的元素進行異或,那麼個數為偶數的元素異或後都變成了0,只留下那...

找2個出現奇數次的數

首先乙個基礎的題就是給你乙個序列,然後這個序列的只有乙個數出現奇數次,其餘數都出現偶數次,找到那個出現奇數的數。最直接的做法就是直接開個vis陣列來存一下,然後vis 當前數 最後for一次找一下就是了,資料大直接卡你,但還有乙個更簡單的方法,就是直接把所有的數異或出來就是最終的答案。int ans...

c 求陣列中出現頻率最高的數

在c 中求陣列中出現頻率最高的數mode。即 眾數 mode 統計學名詞,在統計分布上具有明顯集中趨勢點的數值,代表資料的一般水平 眾數可以不存在或多於乙個 修正定義 是一組資料中出現次數最多的數值,叫眾數,有時眾數在一組數中有好幾個。用m表示。理性理解 簡單的說,就是一組資料中佔比例最多的那個數。...