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

题意

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

相关推荐

看到好多帖子双9都kuku挂,双9都挂,那我还投啥啊
_追梦旅人_:同学考虑我司不,我们正在秋招,可在我主页看岗位,感兴趣可直接投递~
点赞 评论 收藏
分享
亲切的00后在笔试:我也遇到了,所以我早他一步查看图片
点赞 评论 收藏
分享
想玩飞盘的菠萝蜜在春...:上交✌🏻也拒?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务