演算法 陣列中只出現了一次的數字

2022-09-23 15:57:13 字數 871 閱讀 4597

乙個整型陣列裡除了兩個數字之外,其他的數字都是出現了兩次。請寫出程式找出這兩個只出現了一次的數字。要求時間複雜度是o(n), 空間複雜度是o(1)。

tip1:如果該陣列a中只有乙個數字出現了一次,其他的數字都出現了兩次,那麼求出該數字就很簡單,其值就是 a[0] ^ a[1] ^ … ^ a[n-1]

因此就需要想辦法,將問題轉換為tip1裡的問題場景。

tip2:將題目中的陣列的每個數字都異或,求得值為x,那麼實際上x就是該陣列中那兩個僅出現了一次的數字的異或值。

假設x的第k為1,那麼將原陣列中所有的數字按照第k位是否為1,進行劃分為兩個陣列。

然後對兩個陣列,分別實行tip1的解法即可。因為每個子陣列中,都存在乙個僅出現一次的數字,其餘的數字都出現兩次。

#include

#include

#include

#include

#include

#include

using namespace std;

class solution

int x1 = 0, x2 = 0;

for (int i = 0; i < left; i++) x1 ^= a[i];

for (int i = left; i < n; i++) x2 ^= a[i];

printf("x1:%d, x2:%d\n", x1, x2);

}void swap(int a, int i, int j)

};

int main() ;

solution solution;

solution.solve(a, sizeof(a)/sizeof(int));

return 0;

}

演算法 陣列中只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4 我能想到的第乙個方法就是把所有的值當成 map...

初級演算法 陣列 五 只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。示例 輸入 2,2,1 輸出 1 include include include using namespace std class solution return nums nums.size 1...

陣列中只出現一次的數字

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