劍指offer (陣列)陣列中只出現一次的數字

2021-10-08 19:56:00 字數 1569 閱讀 9155

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

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

1、當陣列中只存在1個只出現一次的數字,遍歷整個數字,並且元素異或即可得到結果。

因為其他數字都要出現2次。

a 異或 a =0

0異或 b=b

a 異或 a異或 b =b

2、現在有兩個數字出現一次,那麼我們還是異或所有的數,最後的到的結果就是這兩個不想等的數字的異或結果,比如 2 4 3 6 3 2 5 5 最後異或就是 4 與 6 異或,那麼它們兩個異或的結果肯定不是0;也就是說這個結果數字的二進位制當中至少有一位是1;我們在這個結果數字當中找到第乙個為1的位置,記為第n位,現在我們以第n位是不是1把原來的陣列分為兩部分;再分別異或兩個陣列;分組異或。

/*陣列中只出現一次的數字*/

#include

#include

using

namespace std;

void

singlenumber1

(vector<

int>

& nums,

int& num)

cout <<

"num1:"

<< num << endl;

}int

find_first_bit_one

(int

& num)

return index_bit1;

}bool

isbit1

(int num,

int& bit)

void

singlenumber2

(vector<

int>

& nums,

int& num1,

int& num2)

/*找異或值第乙個出現1的位 index_first*/

int index_first =

find_first_bit_one

(xor_result)

;for

(auto x : nums)

else}}

intmain()

; vector<

int> a2 =

;int num_only=0;

int num_only_one =

0, num_only_tow =0;

singlenumber1

(a1, num_only)

;singlenumber2

(a2, num_only_one, num_only_tow)

; cout <<

"1個只出現一次"

<< num_only << endl;

cout <<

"2個只出現一次"

<< num_only_one <<

" and "

<< num_only_tow << endl;

}

劍指offer 陣列 陣列中只出現一次的數字

思路 借用列表中的刪除元素功能。coding utf 8 class solution 返回 a,b 其中ab是出現一次的兩個數字 def self,array write code here list for e in array if e not in list else del list li...

劍指offer 陣列中只出現一次的數字(陣列)

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了偶數次。請寫程式找出這兩個只出現一次的數字。這題想到用map,類似於 陣列中出現次數超過一半的陣列 其中,data i 是key值,出現次數count為value值。方法一 這個方法比較容易想到,思路也比較簡單。這個就是典型的用空間換時間了,時間複雜...

劍指offer 陣列中只出現一次的數字

1 乙個數字出現一次,其他數字出現兩次 兩個相同的數異或為0,所以將陣列裡的所有數依次異或,得到的結果就是只出現一次的數。include using namespace std int main int num 0 for int i 0 i 7 i cout 2 乙個數字出現一次,其他數字出現n次...