只出现一次的数字
Posted bipolard
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了只出现一次的数字相关的知识,希望对你有一定的参考价值。
Given a non-empty 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?
Example 1:
Input: [2,2,1] Output: 1
Example 2:
Input: [4,1,2,1,2] Output: 4
题意:给定一个非空数组,其中有一个数只出现了一次,而其它的数都出现了两次,找出只出现了一次的数
思路一:利用哈希集合,遍历数组,如果没有出现过,就插入到集合中,如果出现过,那么就把这个数删除,这样遍历完数组中所有的数,哈希集合中剩下的那个就是唯一出现了一次的数
class Solution { public: int singleNumber(vector<int>& nums) { unordered_set<int> numlist; for(int i=0;i<nums.size();i++) { if(numlist.count(nums[i])!=0) numlist.erase(nums[i]); else(numlist.insert(nums[i])); } auto it = numlist.begin(); return *it; } };
思路二:对数组排序,两个一组依次进行比较,直到有不相等的两个数,两个数中的第一个就是那个只出现了一次的数
class Solution { public: int singleNumber(vector<int>& nums) { int len=nums.size(); sort(nums.begin(),nums.end()); int i=0;; while(i<len-1) { if(nums[i]==nums[i+1]){ i+=2; } else break; } return nums[i]; } };
以上是关于只出现一次的数字的主要内容,如果未能解决你的问题,请参考以下文章