第一题### 题目:找出唯一不重复的数字
问题描述:
在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。除了一个数字之外,所有的数字都恰好出现了两次。我们需要帮助班长小C快速找到那个拿了唯一数字卡片的同学手上的数字是什么。
约束条件:
1 ≤ cards.length ≤ 1001,即卡片的数量不超过1001。0 ≤ cards[i] ≤ 1000,卡片上的数字范围是0到1000。- 班级人数是奇数,且除了一个数字外,所有其他数字都恰好出现了两次。
目标:
设计一个 时间复杂度为 O(n) 的算法,尽量减少额外空间的使用,找到唯一不重复的数字。
解决方案
方法 1:利用 异或运算(O(n) 时间复杂度,O(1) 空间复杂度)
-
异或运算特性:
a ^ a = 0:任何数字与自己异或的结果是 0。a ^ 0 = a:任何数字与 0 异或的结果是该数字本身。- 异或运算是 交换律 和 结合律,这意味着顺序不影响最终结果。
-
思路:
- 对所有数字进行异或操作,相同的数字会互相抵消,最终只剩下那个没有配对的数字。
- 我们可以通过一个变量保存异或的结果,最终得到唯一不重复的数字。