問題描述: 乙個整型陣列裡除了乙個數字之外, 其他數字都出現了兩次。找出這個只出現1 次的數字。要求時間複雜度是o(n), 空間複雜度是o(1)。
用異或滿**換律來做這道題目:
當兩個數相同的時候,異或操作得到0system.out.
println(4
^7);
// 3
system.out.
println(4
^7^4
);// 7
system.out.
println(4
^7^4
^7);
// 0
故解此題的**為:
但是這種方法只適用於,其他數出現的次數為偶數次的情況,如果其他每個數都出現n次(n可以是奇數也可以是偶數),該如果找出只出現一次的那個數呢?public
static
void
method
(int
a)system.out.
println
("只出現一次的數為:"
+ res)
;//5
}public
static
void
main
(string[
] args)
;method
(a);
}
方法如下:
我們建立乙個長度為32的陣列bit,bit[i]儲存的是a陣列中,所有數第i位上為1的總個數。(位數是從右往左數的,最右邊是第0位)
我們將bit陣列中的每乙個數除以3,如果除不盡,說明我們最終要找的那個數在這個位上為1
public
static
intmethod
(int
a)}int res =0;
for(
int i =
0; i < bit.length; i++)}
return res;
}public
static
void
main
(string[
] args)
; system.out.
println
(method
(a))
;// 3
}
找出陣列中只出現一次的數字
乙個整型陣列裡除了乙個數字以外,其他數字都出現了兩次。找出這個只出現一次的數字 異或運算 任何乙個數字異或它本身都等於0,如果從頭到尾異或陣列中的每乙個數字,那些出現兩次的數字全部在異或中會被抵消,最終的結果剛好是這個只出現一次的數字 package jbarray 找出陣列中只出現一次的數字 au...
找出陣列中只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。package factory description 只出現一次的數字 author jaryn date 2019 12 2 16 36 public class onenumer return...
40 找出陣列中只出現一次的數字
題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。編寫程式找出這個兩個只出現一次的數字。要求時間複雜度o n 空間複雜度o 1 如,輸出 解析 空間複雜度為o 1 斷絕了用hash table的思路,時間複雜度o n 斷絕排序的思路。如何判斷乙個數字出現2次呢?異或的性質 任何數字和...