C++双层循环解法只出现一次的数字算法题解
时间: 2024-10-06 17:02:19 浏览: 32
c++-剑指offer题解之数组中只出现一次的数字
在C++中,对于寻找数组中只出现一次的数字的问题,双层循环解法通常适用于小型数组,因为它的时间复杂度较高,不适合大规模数据。以下是基本的双层循环解法:
```cpp
#include <vector>
using namespace std;
int singleNumber(vector<int>& nums) {
int firstNum = 0, secondNum = 0;
// 第一层循环遍历整个数组
for (int i = 0; i < nums.size(); i++) {
// 第二层循环更新firstNum和secondNum,利用异或性质
firstNum ^= nums[i];
// 对于每一个元素,同时对firstNum和当前元素做异或
secondNum ^= nums[i];
// 当前元素与firstNum异或的结果再次与secondNum异或,相当于清除掉重复的部分
secondNum ^= firstNum;
}
// 返回经过两次异或操作后的firstNum,此时它存储的就是唯一的单数
return firstNum;
}
```
这种解法的工作原理是,每次迭代,第一个循环变量`i`对应数组中的一个数,然后我们用该数分别与`firstNum`和`secondNum`进行异或操作。由于异或运算的特性,当一个数在一个位置出现奇数次时,它与另一个数异或的结果将是唯一的,因为它会与其他所有出现过的该数相抵消。最终`firstNum`中剩下的将是只出现一次的那个数。
阅读全文