“找单独的数 ”题目解析| 豆包MarsCode AI 刷题

36 阅读2分钟

1. 代码思路

  • 整体目标:这段 Python 代码的目的是对给定列表中的元素进行一种特殊的计算,通过按位异或(^)操作,最终得到一个结果。在给定的测试用例中,可以看出这个结果似乎是列表中只出现一次的元素(在test1中是4,在test2中是2)。
  • 实现方式:代码通过遍历输入列表inp中的每个元素,并使用按位异或操作来更新result的值。按位异或操作有一个特殊的性质,即对于两个相同的数进行按位异或,结果为0。例如,1 ^ 1 = 02 ^ 2 = 0等。而任何数与0进行按位异或,结果是该数本身。所以,当列表中存在成对出现的数时,它们在按位异或的过程中会相互抵消,最后只剩下只出现一次的数。

2. 代码详解

  • 函数定义

收起

python

复制

def solution(inp):

这里定义了一个名为solution的函数,它接受一个列表inp作为参数。

  • 计算过程

收起

python

复制

result = 0
for num in inp:
    result ^= num
  • 首先,初始化result0。然后,通过for循环遍历输入列表inp中的每个元素num。在每次循环中,将resultnum进行按位异或操作(^=)。这个操作会更新result的值。例如,对于test1 = [1, 1, 2, 2, 3, 3, 4, 5, 5],第一次result = 0 ^ 1 = 1,第二次result = 1 ^ 1 = 0(因为1 ^ 1 = 0),第三次result = 0 ^ 2 = 2,以此类推。经过一系列的按位异或操作,成对出现的数会相互抵消,最终result的值就是只出现一次的数(在这个例子中是4)。

  • 返回结果

收起

python

复制

return result

最后,函数返回经过按位异或计算后的result值。

  • 测试部分

收起

python

复制

test1 = [1, 1, 2, 2, 3, 3, 4, 5, 5]
print(solution(test1) == 4)

test2 = [0, 1, 0, 1, 2]
print(solution(test2) == 2)

这里定义了两个测试用例test1test2,并通过print语句来验证solution函数的结果是否符合预期。对于test1,期望函数返回4,对于test2,期望函数返回2

3. 图解(以test1为例)

  • 初始状态:result = 0

    步骤操作result 值
    1result = 0 ^ 11
    2result = 1 ^ 10
    3result = 0 ^ 22
    4result = 2 ^ 20
    5result = 0 ^ 33
    6result = 3 ^ 30
    7result = 0 ^ 44
    8result = 4 ^ 51
    9result = 1 ^ 54

可以看到,成对的数在按位异或过程中相互抵消,最后剩下只出现一次的4。同样的原理适用于test2等其他测试用例。这种方法利用了按位异或的特性,巧妙地实现了找出列表中只出现一次的元素的功能。