题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4
解题思路:
1.题目中要求线性空间,最简单的则是将整个数组进行相与,最后的结果即为目标数。
代码如下:
class Solution { public: int singleNumber(vector<int>& nums) { int ret = 0; for(int i = 0;i < nums.size();++i){ ret = ret^nums[i]; } return ret; } };
2.可以用hash,统计每个数目的数量即可,找出出现一次的数。
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[nums[i]] += 1; }else{ m[nums[i]] = 1; } } map<int,int>::iterator it = m.begin(); for(;it!=m.end();++it){ if(it->second == 1){ return it->first; } } return 0; } };