找单独的数 | 豆包MarsCode AI刷题

61 阅读1分钟

要找到那个拿了独特数字卡片的同学手上的数字,我们可以使用异或(XOR)操作来解决这个问题。异或操作有一个非常有用的特性:相同数字的异或结果为0,不同数字的异或结果为1。因此,如果我们将所有数字进行异或操作,最终的结果将是那个唯一的没有配对的数字。

算法步骤:

  1. 初始化一个变量 unique_number 为0。
  2. 遍历数组中的每一个数字,将其与 unique_number 进行异或操作。
  3. 最终 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) 时间复杂度和尽量减少额外空间使用的优化目标。