力扣热题刷题记录
文章目录系列文章目录前言一、背景二、我的思路
1.暴力求解(超时)2.sort排序3.map或unordered_map 三、官方的思路
1.异或运算(二进制位) 总结
前言每天进步一点点!!
一、背景二、我的思路来源:力扣
链接:https://leetcode-cn.com/problems/single-number/
分析题目:除了一个元素落单,其它元素都有仅有一个对象。
1.暴力求解(超时)class Solution {
public:
int singleNumber(vector& nums) {
//暴力求解
bool flag=false;
for ( int i=0;i
2.sort排序
尤其考虑元素个数只有一两个的特殊情况,不然会出现数组溢出的情形。
class Solution {
public:
int singleNumber(vector& nums) {
//忘记了最简单的排序了,噗
sort(nums.begin(),nums.end() );
if(nums.size()==1)
return nums[0];
else if(nums.size()>=2)
{
if(nums[0]!=nums[1])
return nums[0];
if(nums[nums.size()-1]!=nums[nums.size()-2])
return nums[nums.size()-1];
}
for ( int i=1;i
3.map或unordered_map
不排序的map更快!!!
class Solution {
public:
int singleNumber(vector& nums) {
//用map统计次数
unordered_map record;
for ( int i=0;isecond==1)
{
return it->first;
}
}
return 0;
}
};
三、官方的思路
1.异或运算(二进制位)
核心:
class Solution {
public:
int singleNumber(vector& nums) {
//借鉴某网友的思路
//所有的数进行异或操作,重复的数异或得0,而0与任何数异或保留原值
int ans=0;
for(int i:nums)
{
ans ^=i;//异或操作
}
return ans;
}
};
总结
方法多多,但是最巧妙那个,想不到艾!



