题目解析:笔记1,豆包AI刷题

181 阅读1分钟

第一题### 题目:找出唯一不重复的数字

问题描述:

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。除了一个数字之外,所有的数字都恰好出现了两次。我们需要帮助班长小C快速找到那个拿了唯一数字卡片的同学手上的数字是什么。

约束条件:

  1. 1 ≤ cards.length ≤ 1001,即卡片的数量不超过1001。
  2. 0 ≤ cards[i] ≤ 1000,卡片上的数字范围是0到1000。
  3. 班级人数是奇数,且除了一个数字外,所有其他数字都恰好出现了两次。

目标:

设计一个 时间复杂度为 O(n) 的算法,尽量减少额外空间的使用,找到唯一不重复的数字。

解决方案

方法 1:利用 异或运算(O(n) 时间复杂度,O(1) 空间复杂度)

  1. 异或运算特性

    • a ^ a = 0:任何数字与自己异或的结果是 0。
    • a ^ 0 = a:任何数字与 0 异或的结果是该数字本身。
    • 异或运算是 交换律结合律,这意味着顺序不影响最终结果。
  2. 思路

    • 对所有数字进行异或操作,相同的数字会互相抵消,最终只剩下那个没有配对的数字。
    • 我们可以通过一个变量保存异或的结果,最终得到唯一不重复的数字。