有一个整数数组 ,其中有一个元素只出现了一次,其余每个元素都刚好出现了三次 。 请你编写C++程序找到并输出那个只出现了一次的元素。(应该具有线性时间复杂度)
时间: 2023-12-10 20:42:34 浏览: 57
数组中唯一只出现一次的数字.md
可以使用位运算来解决这个问题,具体步骤如下:
1. 定义三个变量one,two,three,分别表示出现了一次,两次和三次的元素对应的位状态(0或1)。
2. 遍历整个数组,对于每个元素num,更新one,two和three的值:
- 如果two为1,表示之前出现过一次,现在又出现了一次,则将one和two置为0,表示这个元素出现了三次。
- 如果one为1,表示之前出现过一次,现在又出现了一次,则将one置为0,two置为1,表示这个元素出现了两次。
- 如果one和two都为0,表示之前没有出现过此元素,则将one置为1,表示这个元素出现了一次。
3. 最后,返回one,即为只出现了一次的元素。
以下是完整代码实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
int findSingleElement(vector<int>& nums) {
int one = 0, two = 0, three = 0;
for(int num : nums) {
two |= one & num;
one ^= num;
three = one & two;
one &= ~three;
two &= ~three;
}
return one;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6};
int single = findSingleElement(nums);
cout << "The single element is: " << single << endl;
return 0;
}
```
阅读全文