返回

巧解LeetCode 2150:找出数组中的所有孤独数字

后端

前言

LeetCode 2150 要求我们找出数组中所有孤独数字。孤独数字是指在数组中仅出现一次的数字。乍一看,这似乎是一个简单的任务,但可能存在一些隐藏的陷阱。

解决方案

解决此问题最有效的方法之一是使用哈希表。哈希表是一种数据结构,它允许我们以键值对的形式存储和检索数据。在这个问题中,我们将使用哈希表来存储数组中的每个数字及其出现次数。

一旦我们填充了哈希表,就可以遍历哈希表并查找仅出现一次的数字。这些数字就是孤独数字。

以下是使用哈希表和集合的详细代码实现:

def findLonely(nums):
    # 使用哈希表存储数字及其出现次数
    hashmap = {}
    for num in nums:
        hashmap[num] = hashmap.get(num, 0) + 1

    # 创建集合以存储孤独数字
    lonely = set()

    # 遍历哈希表并查找孤独数字
    for num, count in hashmap.items():
        if count == 1 and num - 1 not in hashmap and num + 1 not in hashmap:
            lonely.add(num)

    return list(lonely)

代码详解

  • 我们首先使用一个哈希表来存储数组中的每个数字及其出现次数。

  • 接下来,我们创建一个集合来存储孤独数字。

  • 然后,我们遍历哈希表并查找仅出现一次的数字。

  • 如果一个数字满足以下条件,则它是一个孤独数字:

    • 其出现次数为 1。
    • 其减 1 后或加 1 后不在哈希表中。
  • 最后,我们将所有孤独数字添加到集合中并将其作为列表返回。

时间复杂度

上述算法的时间复杂度为 O(n),其中 n 是数组中的数字个数。

空间复杂度

该算法的空间复杂度为 O(n),因为我们使用了一个哈希表来存储数组中的每个数字。

示例

以下示例展示了如何使用上述算法找出数组中的所有孤独数字:

nums = [1, 2, 3, 4, 3, 2, 1]
lonely = findLonely(nums)
print(lonely)  # 输出:[4]

在给定的示例中,数组 [1, 2, 3, 4, 3, 2, 1] 中的孤独数字是 4,因为它是唯一仅出现一次的数字。

总结

使用哈希表和集合可以高效地找出数组中的所有孤独数字。通过这种方法,我们可以轻松地存储和检索数组中的数字,并快速查找仅出现一次的数字。本文提供了详细的代码实现和示例,帮助您轻松理解并解决此问题。