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 };
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; } };
——世界上从来不乏优秀的人,我只是想接近他们一点。

浙公网安备 33010602011771号