返回
力扣题解:寻找只出现一次的数字
后端
2024-02-02 12:37:52
前言
力扣是一家在线编程题库,其题目的难度和种类非常丰富,能够满足不同水平的程序员需求。力扣第 136 题 —— 只出现一次的数字,是其中一个热门题目。该题目要求在给定一个非空整数数组中,除了某个元素只出现一次以外,其余所有元素都出现了两次。您需要找出这个只出现一次的数字。
解决方法
要解决这个问题,有两种常见的方法:哈希表和位运算。
哈希表
哈希表是一种数据结构,它允许您通过键值对快速检索数据。在哈希表中,每个键都映射到一个值。在我们的例子中,我们可以使用哈希表来存储数组中的每个元素及其出现次数。当我们遍历数组时,如果一个元素不在哈希表中,则将其添加到哈希表并将其出现次数设为 1。如果一个元素已经在哈希表中,则将其出现次数加 1。遍历完数组后,我们可以遍历哈希表,找到出现次数为 1 的元素,这就是我们要找的答案。
位运算
位运算是一种使用二进制位进行计算的方法。在我们的例子中,我们可以使用位运算来解决问题。我们将数组中的所有元素进行异或运算。异或运算的结果是,如果两个二进制位不同,则结果为 1,否则结果为 0。由于每个元素除了一个元素外都出现了两次,所以异或运算的结果将是只出现一次的元素。
代码示例
class Solution {
public:
int singleNumber(vector<int>& nums) {
unordered_map<int, int> hashTable;
for (int num : nums) {
if (hashTable.find(num) == hashTable.end()) {
hashTable[num] = 1;
} else {
hashTable[num]++;
}
}
for (auto entry : hashTable) {
if (entry.second == 1) {
return entry.first;
}
}
return -1;
}
};
class Solution {
public:
int singleNumber(vector<int>& nums) {
int result = 0;
for (int num : nums) {
result ^= num;
}
return result;
}
};
结论
在本文中,我们介绍了两种解决力扣第 136 题——只出现一次的数字的方法:哈希表和位运算。我们还提供了代码示例和详细的解释,帮助您理解如何使用这两种方法解决问题。希望这篇文章对您有所帮助。