大纲
- 题目
- 地址
- 内容
- 解题
- 代码地址
题目
地址
https://leetcode.com/problems/find-the-xor-of-numbers-which-appear-twice/description/
内容
You are given an array nums, where each number in the array appears either once or twice.
Return the bitwise XOR of all the numbers that appear twice in the array, or 0 if no number appears twice.
Example 1:
Input: nums = [1,2,1,3]
Output: 1
Explanation:
The only number that appears twice in nums is 1.
Example 2:
Input: nums = [1,2,3]
Output: 0
Explanation:
No number appears twice in nums.
Example 3:
Input: nums = [1,2,2,1]
Output: 3
Explanation:
Numbers 1 and 2 appeared twice. 1 XOR 2 == 3.
Constraints:
- 1 <= nums.length <= 50
- 1 <= nums[i] <= 50
- Each number in nums appears either once or twice.
解题
这题就是要对一个数组中重复出现两次的数进行异或运算。
因为这题中出现一次的数可能有多个,所以不能直接用异或操作来找出哪些数只出现了一次。这样我们就需要引入一个数据结构(unordered_set)来寻找重复出现的数。
找到出现两次的数,对其进行异或操作就得到最终结果了。
#include <vector>
#include <unordered_set>
using namespace std;
class Solution {
public:
int duplicateNumbersXOR(vector<int>& nums) {
int result = 0;
unordered_set<int> s;
for (int i : nums) {
if (s.find(i) != s.end()) {
result ^= i;
} else {
s.insert(i);
}
}
return result;
}
};
代码地址
https://github.com/f304646673/leetcode/tree/main/3158-Find-the-XOR-of-Numbers-Which-Appear-Twice/cplusplus