题意:数组中出了一个元素仅出现一次外,所有的元素都出现了两次,找出这个仅出现一次的元素。要求做到线性时间复杂度和空间复杂度。
solution1:hash。记录每个元素的count,需要遍历两次数组,因此复杂度是O(2N)。
solution2:XOR。这个玩法之前接触过,但是印象不深,看来找不同时也可以考虑XOR。这种方法只需要访问一次,而且位操作的效率很高,时间复杂度是O(N)。
class Solution {
public:
int singleNumber(vector<int>& nums) {
// 1. XOR
/*int res = 0;
for ( auto n : nums ) {
res ^= n;
}*/
// 2. hash
unordered_map<int, int> hash; // count
int res;
for ( auto n : nums ) {
hash[n]++;
}
for ( auto n : nums ) {
if ( hash[n] == 1 ) {
res = n;
break;
}
}
return res;
}
};
submission:
hash:
XOR: