Loading

136-只出现一次的数字

1、map的用法

使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。

使用find,返回的是被查找元素的位置,没有则返回map.end()。

用find函数来定位数据出现位置,它返回的一个迭代器,当数据出现时,它返回数据所在位置的迭代器,如果map中没有要查找的数据,它返回的迭代器等于end函数返回的迭代器。

 1 class Solution {
 2 public:
 3     int singleNumber(vector<int>& nums) {
 4         map<int,int> m;
 5         for(int i=0;i<nums.size();i++)
 6         {
 7             if(m.find(nums[i])!=m.end())
 8             {
 9                 m.erase(m.find(nums[i]));
10             }
11             else
12             {
13                 m[nums[i]]=1;
14             }
15         
16         }
17         return m.begin()->first;
18 
19     }
20 };
View Code

2、异或的用法

这个方法是看leetcode大神的代码想到的,发现很奇特,这里源于题目给的条件,其他数字出现两次,而只有一个数字出现了一次,

异或操作的特点:

a^a=0

0^a=a

a^b^a=b

故只要数组遍历一遍,直接异或就可以出来结果

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

 

posted @ 2020-02-28 10:21  是凉城吖  阅读(148)  评论(0)    收藏  举报