要找到那个拿了独特数字卡片的同学手上的数字,我们可以使用异或(XOR)操作来解决这个问题。异或操作有一个非常有用的特性:相同数字的异或结果为0,不同数字的异或结果为1。因此,如果我们将所有数字进行异或操作,最终的结果将是那个唯一的没有配对的数字。
算法步骤:
- 初始化一个变量
unique_number为0。 - 遍历数组中的每一个数字,将其与
unique_number进行异或操作。 - 最终
unique_number的值就是那个唯一没有配对的数字。
代码实现:
def solution(cards):
unique_number = 0
for card in cards:
unique_number ^= card
return unique_number
if __name__ == "__main__":
# 测试样例
print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4) # 输出: True
print(solution([0, 1, 0, 1, 2]) == 2) # 输出: True
print(solution([7, 3, 3, 7, 10]) == 10) # 输出: True
解释:
- 异或操作的时间复杂度是 O(1),因此遍历数组的时间复杂度是 O(n)。
- 我们没有使用额外的空间来存储中间结果,只是用了一个变量
unique_number,因此空间复杂度是 O(1)。
这个算法非常高效,符合题目要求的 O(n) 时间复杂度和尽量减少额外空间使用的优化目标。