今天我尝试刷题,寻找独特数字卡片 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。
以下是实现思路及代码:
思路
-
异或操作特性:
x ^ x = 0(任何数字与自己异或结果为0)。x ^ 0 = x(任何数字与0异或结果为其本身)。- 异或操作是可交换的和结合的。
-
算法步骤:
- 初始化一个变量
result为 0。 - 遍历所有卡片上的数字,将每个数字与
result进行异或操作。 - 最终,
result的值就是那个唯一的数字,因为所有出现两次的数字在异或后会抵消为0。
- 初始化一个变量
代码实现
def solution(cards):
result = 0
for card in cards:
result ^= card
return result
if __name__ == "__main__":
# Add your test cases here
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)
复杂度分析
- 时间复杂度:(O(n)),其中 (n) 是卡片数量,因为我们只需遍历一次数组。
- 空间复杂度:(O(1)),只使用了一个额外的变量来存储结果。
代码解释
-
函数定义:
def solution(cards):- 定义了一个名为
solution的函数,接受一个列表cards作为参数,表示每个同学手上的数字卡片。
- 定义了一个名为
-
初始化变量:
result = 0- 初始化
result为0,用于存储最后的唯一数字。
- 初始化
-
遍历卡片:
for card in cards: result ^= card- 使用一个
for循环遍历cards中的每个数字。 - 每次将当前数字与
result进行异或操作。 - 由于异或的特性,成对的数字会抵消,最终
result会得到那个唯一的数字。
- 使用一个
-
返回结果:
return result- 函数最后返回
result,即那个唯一出现一次的数字。
- 函数最后返回
MarsCode AI刷题的亮点
精选真题: MarsCode AI提供了大量的精选真题,这些题目来源于各大知名面试公司和编程竞赛。这种高质量的题目不仅涵盖了广泛的算法和数据结构知识,而且还能够帮助用户提前适应面试中的真实场景,提升解决问题的能力。
学习的重要性与独特价值
- 个性化题目推荐:平台根据用户的水平和进度,推荐适合的题目,确保每位用户都能在合适的挑战中成长。
- 云端编辑器:提供便捷的在线编程环境,用户可以随时随地进行练习,无需安装任何软件,增强了学习的灵活性。
刷题实践
优势总结:
- 实时反馈:每次提交代码后,系统会即时返回结果,帮助用户快速识别和纠正错误,极大提高了学习效率。
- 社区交流:平台鼓励用户在讨论区分享解题思路和技巧,促进知识的分享与交流,营造了良好的学习氛围。
实践案例: 例如,在我使用MarsCode AI刷题时,遇到了一个难度较大的动态规划问题。平台的个性化推荐功能给我提供了相关的基础题目,帮助我逐步掌握所需的知识点。通过不断练习和利用云端编辑器的便利,我的解题能力显著提升,并成功地在实际面试中应对了类似的问题。
总之,MarsCode AI的多种功能为学习者提供了一个全面而高效的学习平台,使得刷题变得更加有趣和有效。通过这样的平台,我能在真实的学习环境中快速提升自己的技能。