机缘
https://leetcode.cn/problems/single-number/description/
leetcode136. 只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
收获
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_set<int> re;
for(int i = 0;i<nums.size();i++)
{
if(re.find(nums[i])==re.end())
{
re.insert(nums[i]);
}
else
{
re.erase(nums[i]);
}
}
return *re.begin();
}
};
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int, int> freq;
for (int num: nums) {
++freq[num];
}
int ans = 0;
for (const auto &n: freq) {
if (n.second == 1) {
ans = n.first;
break;
}
}
return ans;
}
};
*re.begin()返回unordered_set中的元素,题解多为map和异或,虽然我的时间空间复杂度略高。
for (const auto &n: freq)便利map中的键值对。