返回
LeetCode 136:只出现一次的数字
前端
2023-12-30 12:34:25
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:只出现一次的数字问题的有效方法:哈希表法和位运算法。哈希表法使用哈希表来存储数组中的每个元素及其出现次数,然后遍历哈希表并找到只出现了一次的元素。位运算法使用异或运算符将所有元素进行异或运算,然后返回异或运算的结果。这两种方法都可以在线