給定一個非空整數(shù)數(shù)組镀裤,除了某個元素只出現(xiàn)一次以外,其余每個元素均出現(xiàn)兩次眠饮。找出那個只出現(xiàn)了一次的元素。
說明:
你的算法應該具有線性時間復雜度铜邮。 你可以不使用額外空間來實現(xiàn)嗎仪召?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
解答思路,這道題主要是考察了Java中的二進制運算符(與&;或|;非~,異或^),沒接觸過的同學不容易想到,其中這道題主要考察異或運算符的用法寨蹋。
復習一下這些二進制操作符的用法如下:
與(&):兩個操作數(shù)中位都為1,結果才為1扔茅,否則結果為0;
或(|):兩個位只要有一個為1已旧,那么結果就是1,否則就為0;
非(~):如果位為0召娜,結果是1运褪,如果位為1,結果是0;
異或(^):兩個操作數(shù)的位中玖瘸,相同則結果為0秸讹,不同則結果為1。
具體代碼如下:
public int singleNumber(int[] nums) {
int result = 0;
for (int i : nums) {
result = result ^ i;
}
return result;
}
fun singleNumber(nums: IntArray): Int {
var result = 0
for (i in nums) {
result = result xor i
}
return result
}