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次...