题意
已知数组a中有且仅有一个数字出现次数为奇数,请你把这个数字找出来。
解法1
我们可以很方便地用语言中自带的字典结构(如C++中的unordered_map, Java中的HashMap和Python中的字典)统计每个数的出现次数。
时间复杂度:
空间复杂度:
class Solution {
public:
/**
*
* @param a int整型vector 保证长度为奇数且符合题意
* @return int整型
*/
int theNumberAppearOddTimes(vector<int>& a) {
unordered_map<int> dict;
int ans;
for(int i=0;i<a.size();i++)
if((++dict[a[i]])&1)
ans=a[i];
return ans;
}
}; 解法2
本题还有一个更巧妙的解法,就是利用异或运算的性质。、
我们知道对于一个数
,有
又因为异或运算满足
交换律和结合律,所以我们将数组a中的所有元素异或起来就得到了结果。
时间复杂度:
空间复杂度:
class Solution {
public:
/**
*
* @param a int整型vector 保证长度为奇数且符合题意
* @return int整型
*/
int theNumberAppearOddTimes(vector<int>& a) {
int ans=0;
for(int i=0;i<a.size();i++)
ans^=a[i];
return ans;
}
};
京公网安备 11010502036488号