唯一元素的和

标签: 数组 哈希表 计数

难度: Easy

给你一个整数数组 nums 。数组中唯一元素是那些只出现 恰好一次 的元素。

请你返回 nums 中唯一元素的  。

 

示例 1:

输入:nums = [1,2,3,2]
输出:4
解释:唯一元素为 [1,3] ,和为 4 。

示例 2:

输入:nums = [1,1,1,1,1]
输出:0
解释:没有唯一元素,和为 0 。

示例 3 :

输入:nums = [1,2,3,4,5]
输出:15
解释:唯一元素为 [1,2,3,4,5] ,和为 15 。

 

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

Submission

运行时间: 23 ms

内存: 16.0 MB

class Solution:
    def sumOfUnique(self, nums: List[int]) -> int:
        cnt = Counter(nums)
        ans = 0
        for k, v in cnt.items():
            if v == 1:
                ans += k
        return ans

Explain

本题解采用哈希表来统计数组中每个元素出现的次数。通过Python的Counter类,首先统计数组nums中每个元素的出现次数。然后遍历这个计数哈希表,只将出现次数为1的元素相加,得到所有唯一元素的和。

时间复杂度: O(n)

空间复杂度: O(1)

class Solution:
    def sumOfUnique(self, nums: List[int]) -> int:
        cnt = Counter(nums)  # 使用Counter来统计nums中每个数字的出现次数
        ans = 0  # 初始化答案变量为0
        for k, v in cnt.items():  # 遍历计数结果
            if v == 1:  # 只有当某个数字出现一次时
                ans += k  # 累加这些唯一数字
        return ans  # 返回所有唯一元素的和

Explore

哈希表(或字典)提供了非常高效的元素查找、插入和更新操作,这些操作的平均时间复杂度为O(1)。在解决问题时,需要频繁地检查和更新元素的出现次数。使用数组虽然也可以实现,但当元素范围很大或不是连续的时,会导致空间浪费或数组索引处理复杂。链表对于这种需要频繁查找的操作效率较低,因为其查找操作的时间复杂度为O(n)。因此,哈希表是处理此类问题的最佳数据结构,既能保证效率,也能节省空间。

Counter类是Python collections模块中的一个特殊的字典类,它的内部实现基于哈希表。它为每个元素建立一个键,并将该元素出现的次数作为值。每次插入一个元素时,Counter检查元素是否已存在,如果存在则增加该元素的计数,如果不存在则将该元素的计数设置为1。这种实现方式确保了元素计数的准确性和操作的高效性,因为每次更新操作仅需O(1)的时间复杂度。

在所有元素都是唯一的情况下,Counter会为每个元素记录一次出现,遍历这些元素并累加结果时将得到整个数组的和,这种情况下方法依然有效且效率高。如果没有唯一的元素,即每个元素至少出现两次,那么在遍历计数哈希表时,不会有元素的计数为1,因此返回的和将为0。这种方法在这两种极端情况下都能正确处理,并且不需要额外的逻辑判断,显示出其鲁棒性和效率。