码迷,mamicode.com
首页 > 其他好文 > 详细

Single Number leetcode

时间:2016-01-19 21:04:35      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

Given an array of integers, every element appears twice except for one. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

 

Subscribe to see which companies asked this question

 
这个题我首先想到的是用hashmap,第一次添加,第二次删除,剩下的没有删除的就是答案
int singleNumber(vector<int>& nums) {
    unordered_map<int, int> cnt;
    for (auto i : nums)
    {
        if (cnt.find(i) != cnt.end())
            cnt.erase(i);
        else
            cnt.insert(make_pair(i, 1));
    }
    return (*cnt.begin()).first;
}

去discuss中,发现还有更简单的解法,使用XOR位运算,因为A XOR A = 0,而且XOR具有结合性,所以A XOR B XOR C XOR A XOR C XOR B = 0

int singleNumber(vector<int>& nums) {
    int result = 0;
    for (int i = 0; i < nums.size(); i++)
    {
        result ^= nums[i];
    }
    return result;
}

 

Single Number leetcode

标签:

原文地址:http://www.cnblogs.com/sdlwlxf/p/5143278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!