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

题意

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

相关推荐

来!
G了的牛可乐很爱吃烤...:百度面试官 给我说, 十月后开奖,现在都在泡池子
点赞 评论 收藏
分享
运营你豪哥:1.模板换一个,现在的模板基础信息加个照片已经占了30%的空间。 2.实习经历的描述,按时间倒序标注清楚,选2-3段和你求职意向契合的经历填写。 3.自我评价再改改,要不就删了;怎么感觉自我评价是在介绍你专业的培养体系,看不出重点要突出什么。
听劝,这个简历怎么改
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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