力扣-136-只出现一次
方法一:异或运算
异或运算满足交换律和结合律:a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b
因为整数数组中的数字只能出现一次或者两次,两个相同数字的异或是0,那么将数组中的所有数字做异或运算后,出现两次的数字两两异或后变成0,出现一次的数字和0异或后还是本身。
/*位运算,将vector中的所有数字均进行异或,出现两次的数字变成零*/ class Solution { public: int singleNumber(vector<int>& nums) { int len = nums.size(); for(int i = 1; i < len; i++) { nums[0] ^= nums[i]; } return nums[0]; } };
方法二:Map
#include <map> using namespace std; class Solution { private: map<int,int> hash; public: int singleNumber(vector<int>& nums) { int len = nums.size(); int result; for(int i = 0; i < len; i++){ hash[nums[i]] += 1; } for(int i = 0; i < len; i++){ if(hash[nums[i]] == 1) result = nums[i]; } return result; } };
Map用来存一个数字出现的次数即可
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!