返回

LeetCode 136:只出现一次的数字

前端

LeetCode 136:只出现一次的数字

题目

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

  • 你的算法应该具有线性时间复杂度。
  • 你可以假设输入数组中不存在任何重复元素。

示例 1:

输入:nums = [2, 2, 1]
输出:1

示例 2:

输入:nums = [4, 1, 2, 1, 2]
输出:4

示例 3:

输入:nums = [1]
输出:1

解决方案

哈希表法

哈希表是一种快速查找元素的有效数据结构。我们可以使用哈希表来存储数组中的每个元素及其出现次数。然后,我们遍历哈希表并找到只出现了一次的元素。

def single_number(nums):
    """
    使用哈希表法找出只出现一次的数字

    参数:
        nums:非空整数数组,其中除某个元素只出现一次外,其余每个元素均出现两次

    返回值:
        只出现了一次的数字
    """
    # 创建一个哈希表来存储元素及其出现次数
    hash_table = {}

    # 遍历数组并更新哈希表
    for num in nums:
        if num not in hash_table:
            hash_table[num] = 1
        else:
            hash_table[num] += 1

    # 遍历哈希表并找到只出现了一次的元素
    for num, count in hash_table.items():
        if count == 1:
            return num

# 测试用例
nums1 = [2, 2, 1]
print(single_number(nums1))  # 输出:1

nums2 = [4, 1, 2, 1, 2]
print(single_number(nums2))  # 输出:4

nums3 = [1]
print(single_number(nums3))  # 输出:1

位运算法

位运算是一种对二进制位进行操作的技术。我们可以使用位运算来找到只出现了一次的数字。

def single_number(nums):
    """
    使用位运算法找出只出现一次的数字

    参数:
        nums:非空整数数组,其中除某个元素只出现一次外,其余每个元素均出现两次

    返回值:
        只出现了一次的数字
    """
    # 使用异或运算符将所有元素进行异或运算
    result = 0
    for num in nums:
        result ^= num

    # 返回异或运算的结果
    return result

# 测试用例
nums1 = [2, 2, 1]
print(single_number(nums1))  # 输出:1

nums2 = [4, 1, 2, 1, 2]
print(single_number(nums2))  # 输出:4

nums3 = [1]
print(single_number(nums3))  # 输出:1

结论

在本文中,我们介绍了两种解决LeetCode 136:只出现一次的数字问题的有效方法:哈希表法和位运算法。哈希表法使用哈希表来存储数组中的每个元素及其出现次数,然后遍历哈希表并找到只出现了一次的元素。位运算法使用异或运算符将所有元素进行异或运算,然后返回异或运算的结果。这两种方法都可以在线