题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
思路:
遍历查询——第一次出现保留,第二次出现移除
代码1:(向量查询)
class Solution {
public:
int singleNumber(vector<int>& nums) {
vector<int> ans;
for(int i:nums){
vector<int>::iterator v=find(ans.begin(),ans.end(),i);
if(!ans.empty() && v!=ans.end())
ans.erase(v);
else
ans.push_back(i);
}
return ans[0];
}
};
代码2:(无序集合查找)
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_set<int> ans;
for(int i:nums)
if(ans.count(i)!=0)
ans.erase(i);
else
ans.insert(i);
return *ans.begin();
}
};
代码3:(异或操作——满足交换律和结合律)
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ans = 0;
for (int i: nums) ans ^= i;
return ans;
}
};
收获:
1.向量基本操作
find(nums.begin(), nums,end(), i) ——查找元素i所在索引
erase(i) ——抹去指定位置元素i(类型为iterator)
push_back(i) ——在向量尾部插入元素i
2.无序集合基本操作
count(i) ——计算集合中有多少个i
erase(i) ——在集合中去除值为i的元素
insert(i) ——在集合中插入值为i的元素
begin() ——集合首元素迭代器地址
end() ——集合尾元素迭代器地址
3.使用查询可以利用集合或哈希表存储,可以提高查询效率
寻找唯一元素算法
2515

被折叠的 条评论
为什么被折叠?



