【题解】出现次数为奇数的数

题意

已知数组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;
    }
};
全部评论

相关推荐

投递拼多多等公司10个岗位 Java求职圈
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务