找數2 nkoj3679(百度面試題)

2021-07-11 19:58:31 字數 764 閱讀 9414

p3679  找數2

時間限制 : 

10000 ms   

空間限制 : 

0 kb

問題描述

給你n個整數,其中有兩個數字出現的次數是奇數次,其餘數字都出現了偶數次,現在告訴你這n個數異或起來的結果x,請你快速找出這兩個出現次數為奇數的數字。

注意,此題空間複雜度要求為o(1),時間複雜度為o(n)

輸入格式

第一行,兩個整數n和x (1<=n<=1000000)

第二行,n個空格間隔的整數範圍是[0,10000000000]

輸出格式

一行,兩個整數,表示所求結果,按由小到大順序排列

樣例輸入

6 74 2 1 3 1 2

樣例輸出

3 4

提示2<=n<=1,000,000

思路:

顯然,題目中的x即為要找的兩個數的異或結果,那怎麼找出這兩個數呢?可以採用分組的方法。把給出的n個數分成兩組,設要找的兩個數為a,b。那麼因為a!=b,所以他們的異或結果必不為0.那麼,我們找出他們異或結果中的1,以這一位上是否為1把n個數分成兩組,此時a,b分別在兩組裡面,而其他的數必然分別全部在其中一組。把兩組的數異或起來得到的即為要求的兩個數。

#include#include#includeusing namespace std;

int main()

cout<

82 第 2 組百度面試題

1.給出兩個集合 a 和 b,其中集合 a 集合 b 要求 問題 1 根據集合 a 中的 name 查詢出集合 b 中對應的屬性資訊 問題 2 根據集合 b 中的屬性資訊 單個屬性,如 age 20 等 查詢出集合 a 中對應的 name。2.給出乙個檔案,裡面包含兩個字段,即 url 為 size...

百度面試題 把陣列排成最小的數

問題描述 輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。例如輸入陣列,則輸出這兩個能排成的最小數字32132。請給出解決問題的演算法,並證明該演算法。思路 先將整數陣列轉為字串陣列,然後字串陣列進行排序,最後依次輸出字串陣列即可。這裡注意的是字串的比較函式需要重新定...

百度面試題 把陣列排成最小的數

問題描述 輸入乙個正整數陣列,將它們連線起來排成乙個數,輸出能排出的所有數字中最小的乙個。例如輸入陣列,則輸出這兩個能排成的最小數字32132。請給出解決問題的演算法,並證明該演算法。思路 先將整數陣列轉為字串陣列,然後字串陣列進行排序,最後依次輸出字串陣列即可。這裡注意的是字串的比較函式需要重新定...