經典面試題之尋找一組數中只出現一次的兩個數

2021-07-14 11:06:46 字數 973 閱讀 1945

這個面試題是非常經典的,辦法有很多,最笨的辦法就是乙個乙個找,但是這樣的話計算機太累,時間複雜度,空間複雜度也比較高,所以我這裡給出一種簡單的方法,這方法主要用到了

異或運算

,首先介紹一下異或運算:

相同為零,不同為一,所以當兩個數

不同時異或

結果不為0

,當兩個數

相同時異或

結果為0

,任何數

異或0都

等於自己,

例如:3 ^ 0 = 3;  4 ^ 5 = 1; 7 ^ 7 = 0;

下面給出程式設計示例,加入尋找中的指出先得一組數,我們可以看出,結果是4,5.下面給出程式

void findnum(int *arr, int size, int &n1, int &n2)

int te = 0;

for (int i = 0; i < 32; i++) //尋找出區別位,第乙個不為0的位 }

cout <

for (int k = 0; k < size; k++) }

int main()

; int size = sizeof(arr) / sizeof(arr[0]);

int n1 = 0;

int n2 = 0;

findnum(arr, size, n1, n2);

cout << "第乙個數:" << n1 << endl << "第二個數:" << n2 << endl;

system("pause");

return 0;

}

執行結果:

可以看出結果完全正確,而且這種方法,時間複雜度,空間複雜度都比較低!

記一組面試題

我當時用的是python的內建函式,現在想想應該自己實現乙個堆排序的,這個才是最好的排序方式 堆排序裡面的儲存結構是陣列 邏輯結構是二叉樹 def heapsortmax lst,n 找出最大值登頂對頂 n len lst if n 1 return lst depth n 2 1 這個深度是0 d...

經典面試題 陣列中只出現乙個的數 2

題目 陣列中只有乙個數字出現過一次,其他的數字出現過三次。求出出現過一次的那個數字。用異或處理呢?其實,我們要通過問題看本質,上一道題為什麼可以用異或呢?其實我們是把數字變成二進位制來進行的 思考。用異或是因為其他數字出現過兩次這個特性決定的,而在本題其他數字是出現了三次。從而,我們再重新分析發現,...

經典面試題 k節點一組旋轉鍊錶

題目 給出乙個鍊錶和乙個數k,比如鍊錶1 2 3 4 5 6,k 2,則翻轉後2 1 4 3 6 5,若k 3,翻轉後3 2 1 6 5 4,若k 4,翻轉後4 3 2 1 5 6。如果節點的數量是不k的倍數則最終留出節點應該保持原樣,每k個一反轉,不到k個不用反轉。用程式實現。美團校招 來自lee...