[136]Single Number

来源:互联网 发布:文本相似度算法 java 编辑:程序博客网 时间:2024/05/29 18:05

【题目阐述】

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?

【思路】

1.先将nums排序,然后从第一个数开始跟自己右边的数比较是否相等,不等即为答案,相等则跳过这两个从后面的继续比较。

2.这个是看了discuss的提示,利用了相同的数异或为0,不同的数异或为1的性质。

3.遍历vector,如果在map中没有找到,就加到map中,反之则说明这个数有重复,把这个数删掉。

【代码】

1.

class Solution {public:    int singleNumber(vector<int>& nums) {        sort(nums.begin(),nums.end());        for(int i=0;i<nums.size()-1;i++){            if(nums[i]==nums[i+1]) i++;            else return nums[i];        }        return nums[nums.size()-1];    }};

2.

class Solution {public:    int singleNumber(vector<int>& nums) {        int ans=nums[0];        int n=nums.size();        for(int i=1;i<n;i++){            ans^=nums[i];        }        return ans;    }};

3.

class Solution {public:    int singleNumber(vector<int>& nums) {        map<int,int> m;        for(int i=0;i<nums.size();i++){            if(m.find(nums[i])==m.end()){               m.insert(pair<int,int>(nums[i],nums[i]));            }            else{                m.erase(m.find(nums[i]));            }        }        return m.begin()->first;    }};


0 0
原创粉丝点击