一、思路
位运算
二、解题方法
三、code
class Solution {
public:
int singleNumber(vector<int>& nums) {
int ret=0;
for (auto e:nums) ret ^=e;//循环nums中每个数,并做异或运算
return ret;
}
};
=========================================================================
四、学到的知识
1、
位运算
位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。
位运算符有:
&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。
其中,按位取反运算符是单目运算符,其余均为双目运算符。
位运算符的优先级从高到低,依次为~、&、^、|,
其中~的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右,且优先级低于关系运算符。
2、
①for (auto x : nums)
作用就是迭代容器中所有的元素,每一个元素的临时名字就是x;相当于:
for (int num=0; num<nums.length; num++)
②for (auto e:nums)和for(int num:nums)的区别
for (auto e:nums)
使用auto
关键字进行类型推导。编译器会根据nums
中元素的类型来自动推导出e
的类型。这种方式更加灵活,适用于不同类型的容器或数组。for (int num:nums)
显式指定了num
的类型为int
。这种方式限定了循环变量的类型为int
,适用于已知容器或数组元素类型的情况。