Given an array of integers, every element appears twice except for one. Find that single one.
Java 實現代碼:
public static int singleNumber(int[] nums) {
// 1. 常規解法,要藉助額外的空間
/**
Set<Integer> sets= new HashSet<Integer>();
for (int i = 0; i < nums.length; i++) {
if (!sets.contains(nums[i]))
sets.add(nums[i]);
else
sets.remove(nums[i]);
}
return sets.iterator().next();
**/
// 藉助 XOR 特性,當兩個二進制值不同的時候返回 1
// 因爲A XOR A = 0,且XOR運算是可交換的,於是,對於實例{2,1,4,5,2,4,1}就會有這樣的結果:
// (2^1^4^5^2^4^1) => ((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5
int result = 0;
for (int i = 0; i < nums.length; i++) {
result ^= nums[i];
}
return result;
}
Lua 實現代碼:
Lua 5.3 纔有原生的二進制操作, ~ 代表了 xor
function singleNumber(nums)
assert(type(nums) == "table", "nums 不是 table 類型")
result = 0
for i = 1, #nums do
print(result .. nums[i])
result = result ~ nums[i]
end
return result;
end
print(singleNumber({1}))