找单独的数的思路解析及收获|豆包MarsCode AI刷题

84 阅读2分钟

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

问题理解 题目要求我们找到一个数组中唯一一个出现一次的数字,而其他数字都恰好出现两次。我们需要设计一个时间复杂度为 O(n) 的算法,并且尽量减少额外空间的使用。

解题思路

  1. 异或运算的特性: 异或运算(XOR)有一个非常有用的特性:a ^ a = 0 和 a ^ 0 = a。这意味着,如果我们将数组中所有数字进行异或运算,出现两次的数字会相互抵消,最终剩下的就是唯一出现一次的数字。

  2. 算法步骤: 初始化一个变量 result 为 0。 遍历数组中的每一个数字,将其与 result进行异或运算。 遍历结束后,result中存储的就是唯一出现一次的数字。

在代码中 for (int card : cards) { 表示对每一个数字进行异或运算 result ^= card; }

即返回最终的异或结果,即唯一出现一次的数字 return result; }最后进行输出,本题目的关键点是 1.异或运算:利用异或运算的特性来消除出现两次的数字。 2.时间复杂度:O(n),因为我们只需要遍历数组一次。 3.空间复杂度:O(1),因为我们只使用了一个额外的变量result。 通过我收获了很多,也学习到了异或运算的特性,在分析算法的过程中,我对于中英文的切换还存在如此低级的错误,与此同时对于时间复杂度的算法有了更深的了解,也明白了在写正确代码的同时,也要注意减少额外空间的使用,进而获得更完善的代码。在研究及思考的过程中,我对时间复杂度和空间复杂度的掌握还不是很熟练,因此我会从基础开始练习,努力掌握相关知识。 总之,AI 技术在教育领域的应用已经开启了教育变革的新篇章。它为教育带来了前所未有的机遇和挑战,而我们需要在拥抱技术的同时,保持理性和审慎,充分发挥其优势,规避潜在风险,让 AI 成为教育发展的有力助推器,培养出具有创新精神、自主学习能力和良好人文素养的新一代人才。