题目描述
知识点
位操作、哈希表
结果
实现
码前思考
- 这道题我只会用
set
,对不起。。。所以无法做到不使用额外的内存空间,害。 - 正是我做不到这些,所以我的时间和空间复杂度都贼高,喵喵喵!
- 正确的打开方式是使用位操作(Bit Manipulation)
代码实现
菜鸡的Set代码
//只会set,dbq,不会without using extra memory
class Solution {
public:
int singleNumber(vector<int>& nums) {
set<int> st;
for(int i=0;i<nums.size();i++){
if(st.find(nums[i]) != st.end()){
st.erase(nums[i]);
}else{
st.insert(nums[i]);
}
}
int ans;
for(auto i : st){
ans = i;
}
return ans;
}
};
标准的位操作算法
class Solution {
public:
int singleNumber(vector<int>& nums) {
//根据异或运算的性质,初始化为0比较好
int ans = 0;
for(int i=0;i<nums.size();i++){
ans = ans ^ nums[i];
}
return ans;
}
};
码后反思
- 根据异或运算的性质,初始化为0比较好~~~
- 位运算的代码量真的好小好小啊啊啊啊