一、题目解析 题目:找单独的数 def solution(cards): unique_card = 0 # 遍历卡片列表,进行异或操作 for card in cards: unique_card ^= card return unique_card
if name == "main": # 测试用例 print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4) print(solution([0, 1, 0, 1, 2]) == 2) print(solution([7, 3, 3, 7, 10]) == 10)
-
代码结构:
- 代码结构已经非常简洁明了,
solution函数直接返回了唯一不重复的数字。 - 测试用例部分也很清晰,直接调用
solution函数并打印结果。
- 代码结构已经非常简洁明了,
-
注释:
- 可以在代码中添加一些注释,解释异或操作的原理,帮助理解代码的工作方式。
-
异常处理:
- 虽然题目保证了输入的合法性,但在实际开发中,添加一些基本的输入检查(如确保输入列表长度为奇数)可以提高代码的健壮性。
-
性能优化:
- 当前代码的时间复杂度已经是 O(n),空间复杂度为 O(1),已经非常优化,无需进一步优化。 def solution(cards): unique_card = 0
遍历卡片列表,进行异或操作
异或操作的特性:
- 任何数与自身异或结果为0
- 任何数与0异或结果为该数本身
因此,遍历整个列表并对所有元素进行异或操作,最终结果就是那个唯一不重复的数字
for card in cards: unique_card ^= card return unique_card 二、知识总结
-
异或操作(XOR) :
-
定义:异或操作是一种位运算,用符号
^表示。对于两个二进制位,如果相同则为0,不同则为1。 -
特性:
- 任何数与自身异或结果为0:
a ^ a = 0 - 任何数与0异或结果为该数本身:
a ^ 0 = a - 异或操作满足交换律和结合律:
a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b
- 任何数与自身异或结果为0:
-
应用:在本题中,利用异或操作的特性,可以高效地找到唯一不重复的数字。遍历整个列表并对所有元素进行异或操作,最终结果就是那个唯一不重复的数字。
-
-
遍历列表:
-
时间复杂度:
- 定义:时间复杂度是衡量算法执行时间随输入规模增长的变化趋势。
- 表示:通常用大O表示法(O(n))来表示时间复杂度。
- 应用:在本题中,遍历列表的时间复杂度为 O(n),其中 n 是列表的长度。由于题目要求时间复杂度为 O(n),当前代码满足要求。
-
空间复杂度:
-
定义:空间复杂度是衡量算法在执行过程中所需的额外空间随输入规模增长的变化趋势。
-
表示:通常用大O表示法(O(1))来表示空间复杂度。
-
应用:在本题中,算法只使用了常数级别的额外空间(一个变量
unique_card),因此空间复杂度为 O(1)。 其中时间复杂度和空间复杂度较难理解,应提前了解。 三、学习计划 每天至少练习一道题,可以先从简单程度开始,在空闲的时候钻研一下中等甚至困难的题。 四、工具应用 将ai刷题功能与掘金课程共同使用,同时使用代码软件自己练习编写代码。
-