python算法例23 落单的数Ⅰ

1. 问题描述

给出2n+1个非负整数元素的数组,除其中一个数字之外,其他每个数字均出现两次,找到这个数字。

2. 问题示例

给出[1,2,2,1,3,4,3],返回4。

3. 代码实现

使用异或运算(XOR)实现

def find_single_number(nums):
    result = 0
    for num in nums:
        result ^= num
    return result

# 测试示例
nums = [1, 2, 2, 1, 3, 4, 3]
result = find_single_number(nums)
print(result)

该算法的思路是,由于除了一个数字之外,其他数字都出现了两次,所以对数组中的所有数字进行异或运算,最后的结果就是那个只出现一次的数字。异或运算具有以下性质:

  • 任何数与 0 进行异或运算,结果仍然是该数本身。
  • 任何数与自身进行异或运算,结果为 0。

因此,将数组中的所有数字进行异或运算,最后得到的结果就是那个只出现一次的数字。

在示例中,数组 [1, 2, 2, 1, 3, 4, 3] 中所有数字进行异或运算的结果为 4,即为只出现一次的数字。

python算法例23 落单的数Ⅰ_第1张图片

使用哈希表实现

def find_single_number(nums):
    hash_table = {}
    for num in nums:
        if num in hash_table:
            hash_table[num] += 1
        else:
            hash_table[num] = 1
    for num, count in hash_table.items():
        if count == 1:
            return num

# 测试示例
nums = [1, 2, 2, 1, 3]
result = find_single_number(nums)
print(result)

该算法的思路是,使用哈希表记录每个数字出现的次数,然后遍历哈希表找到只出现一次的数字。

在示例中,数组 [1, 2, 2, 1, 3] 中数字 3 只出现了一次,因此返回结果为 3。相比于异或运算的方法,使用哈希表的方法需要额外的空间来存储哈希表,但时间复杂度相同,都为 O(n)。

python算法例23 落单的数Ⅰ_第2张图片

使用数学方法实现

def find_single_number(nums):
    return 2 * sum(set(nums)) - sum(nums)

# 测试示例
nums = [1, 2, 2, 1, 3, 4, 3]
result = find_single_number(nums)
print(result)

该算法的思路是,先将数组中的所有数字去重得到不重复的数字集合,然后将集合中的数字乘以 2,再减去数组中所有数字的和,最终得到的结果就是只出现一次的数字。

在示例中,数组 [1, 2, 2, 1, 3, 4, 3] 中数字 4 只出现了一次,因此返回结果为 4。相比于异或运算和哈希表的方法,使用数学方法的代码更简洁,但是需要进行额外的数学计算,可能会有一定的精度误差。。

python算法例23 落单的数Ⅰ_第3张图片

使用集合方法实现

def find_single_number(nums):
    num_set = set()
    for num in nums:
        if num in num_set:
            num_set.remove(num)
        else:
            num_set.add(num)
    return num_set.pop()

# 测试示例
nums = [1, 2, 2, 1, 3, 4, 3]
result = find_single_number(nums)
print(result)

该算法的思路是,使用一个集合来存储出现过一次的数字,遍历数组中的每个数字,如果数字已经在集合中存在,则从集合中移除;否则,将数字添加到集合中。最后,集合中剩下的元素就是只出现一次的数字。

在示例中,数组 [1, 2, 2, 1, 3, 4, 3] 中数字 4 只出现了一次,因此返回结果为 4。相比于其他方法,使用集合的方法不需要进行额外的位运算或数学计算,空间复杂度为 O(n),时间复杂度也为 O(n)。

python算法例23 落单的数Ⅰ_第4张图片

你可能感兴趣的:(Python算法,算法,python,数据结构)