找2個出現奇數次的數

2021-09-24 16:19:23 字數 690 閱讀 9675

首先乙個基礎的題就是給你乙個序列,然後這個序列的只有乙個數出現奇數次,其餘數都出現偶數次,找到那個出現奇數的數。

最直接的做法就是直接開個vis陣列來存一下,然後vis[當前數]++,最後for一次找一下就是了,資料大直接卡你,但還有乙個更簡單的方法,就是直接把所有的數異或出來就是最終的答案。

int ans =0;

for(

int i =

1;i <= n;i++

)cout << ans <那麼為什麼這樣是可行的呢?首先2個數異或的值的二進位制的位上為1,那麼這2個數的二進位制位在當前位上必然乙個為0,乙個為1,所以就把所有數以此來分為2部分,最後異或出來的值就是答案。

int ans1=

0,ans2 =

0,ans =0;

int num[man]

;for

(int i =

1;i <= n;i++

)int pos=0;

for(

int i =

0;i <=

31;i++)}

pos =

1

int i =

1;i <

=n;i++

)else

}cout << ans1 <<

' '<題解

找出出現奇數次的數

題目 給你n個數,其中有且僅有乙個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那乙個數。給你n個數,其中有且僅有兩個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那兩個數。答案 從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。這是...

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

題 有n 2個數,n個數出現了偶數次,2個數出現了奇數次 這兩個數不相等 問用o 1 的空間複雜度,找出這兩個數,不需要知道具體位置,只需要知道這兩個值。求解 如果只有乙個數出現過奇數次,這個就比較好求解了,直接將陣列中的元素進行異或,異或的結果 就是只出現過奇數次的那個數。但是題目中有2個數出現了...

找出出現奇數次數的數

function findodd a else for var i 0 iif hash i 2 for var i 0 iif map i 2 function dotest a,n test.describe example tests function 剛開始學js,還只是知道怎麼解,不太會靈...