非常有幸能加入到本期的青训营跟老师和同学们大家一起交流和学习,我在这之前其实是一个学Python的小白,之前我也看了很多关于Python的课程,但很少去刷题巩固,因为我发现在练习的过程中,遇到复杂和困难的情况时非常容易磨蹭,效率变得非常低,所以我觉得AI刷题是一个我们学习新知识并巩固和强化的很好的机会,我们可以将自己的思路、代码、问题和AI互动,还可以让AI帮我们检查和拓展,这对提高效率无疑是十分有效的,关于AI刷题的使用实践和体会我会在后续与大家分享,现在我想就个别题目给大家做一些知识点的总结。 在“找单独的数”中,题目描述是这样的:在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。这题的解决方法其实很简单,我们将数组中所有数字进行异或运算,最终结果就是那个只出现一次的数字,根据异或的特性:a^a=0,a^0=a,“^”在Python中就表示异或运算,如果想到这一点,完成下来简直不费吹灰之力。关键知识点总结:
-
异或运算(XOR)
-
定义:异或运算符
^对两个操作数的每一位进行异或运算。如果两个位相同,结果为 0;如果两个位不同,结果为 1。 -
特性:
a ^ a = 0:任何数与自身异或的结果为 0。a ^ 0 = a:任何数与 0 异或的结果为它本身。- 异或运算满足交换律和结合律:
a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b。
-
应用:在本题中,利用异或运算的特性,可以将数组中所有元素进行异或运算,最终结果就是那个只出现一次的数字。
-
-
时间复杂度
- 定义:时间复杂度是衡量算法执行时间随输入规模增长而变化的一个指标。
- 目标:在本题中,要求时间复杂度为 O(n),即算法的时间消耗与数组长度 n 成线性关系。
- 实现:通过一次遍历数组并进行异或运算,可以在 O(n) 时间内找到只出现一次的数字。
-
空间复杂度
- 定义:空间复杂度是衡量算法在执行过程中所需额外空间随输入规模增长而变化的一个指标。
- 目标:尽量减少额外空间的使用,以体现算法的优化能力。
- 实现:在本题中,除了存储结果的变量
result外,不需要额外的空间,因此空间复杂度为 O(1)。
-
位运算
- 定义:位运算是对二进制位进行的操作,包括与(&)、或(|)、非(~)、异或(^)等。
- 应用:在本题中,使用异或运算来消除所有出现两次的数字,最终留下只出现一次的数字。