源地址
https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/
OddOccurrencesInArray
給定一個非空數組 A,包含有 N 個整數,起始下標爲 0。數組包含有奇數個元素,其中除了唯一一個元素之外,其他每個元素都可以與數組中另一個有相同值的元素配對。
比如,在下面這個數組中:
A[0] = 9
A[1] = 3
A[2] = 9
A[3] = 3
A[4] = 9
A[5] = 7
A[6] = 9
下標爲 0 和 2 的元素的值是 9
下標爲 1 和 3 的元素的值是 3
下標爲 4 和 6 的元素的值是 9
下標爲 5 的元素的值是 7,無法配對
寫一個函數:
class Solution {
public int solution(int[] A);
}
對滿足上述條件的數組 A,返回數組中無法配對的元素的值。
比如,給定以下數組:
A[0] = 9
A[1] = 3
A[2] = 9
A[3] = 3
A[4] = 9
A[5] = 7
A[6] = 9
函數應該返回 7,如上述解釋。
假定:
N 取值範圍 [1…1,000,000]內的奇數;
數組 A 每個元素是取值範圍 [1…1,000,000,000] 內的 整數 ;
A中除了一個元素以外其他的元素都出現奇數次。
第一步
用HashSet來保存結果,如果出現兩次就把值從set中刪除,最後剩下的就是落單的數。
public int solution(int[] A) {
Set<Integer> set = new HashSet<Integer>();
for (int a : A) {
if (set.contains(a)) {
set.remove(a);
} else {
set.add(a);
}
}
return set.iterator().next();
}
第二步
把數組中所有的數字全部和0異或在一起,偶數次出現的數異或爲0,最後剩下的就是落單的數。
public int solution(int[] A) {
int result = 0;
for (int a : A) {
result ^= a;
}
return result;
}