返回

力扣题解:寻找只出现一次的数字

后端

前言

力扣是一家在线编程题库,其题目的难度和种类非常丰富,能够满足不同水平的程序员需求。力扣第 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 题——只出现一次的数字的方法:哈希表和位运算。我们还提供了代码示例和详细的解释,帮助您理解如何使用这两种方法解决问题。希望这篇文章对您有所帮助。