找单独的数 | 豆包Marscode AI 刷题

74 阅读3分钟

在解决这个问题时,我们首先需要理解题目要求:在一个整数列表中找到唯一出现一次的数字,而其他所有数字都恰好出现了两次。这要求我们的算法不仅能够准确地识别出这个独特的数字,而且还要尽可能高效,即时间复杂度为O(n),同时尽量减少额外的空间使用。

基础解法分析

你给出的基础解法是通过遍历set(inp)来寻找那些只出现一次的元素。这种方法的时间复杂度取决于集合操作和计数操作,通常情况下接近O(n^2)(因为对于每个不同的元素都要进行一次计数操作,而计数本身也是线性的)。此外,它还使用了额外的空间来存储set中的不同元素。因此,尽管简单直接,但并不完全符合题目对效率的要求。

优化思路 - 使用位运算

为了达到O(n)的时间复杂度并减少空间使用,我们可以利用位运算中的异或(XOR)特性。异或运算具有以下性质:

  • 任何数与0做XOR结果还是原来的数。
  • 任何数与自己做XOR结果为0。
  • XOR满足交换律和结合律。

基于这些性质,如果我们将数组中的所有数字依次进行异或运算,那么成对出现的数字最终会相互抵消变成0,而剩下的就是那个唯一的数字。

实现步骤

  1. 初始化一个变量unique为0。
  2. 遍历给定的整数列表,对于列表中的每一个元素,将其与unique进行异或运算,并将结果赋值给unique
  3. 当遍历完成后,unique即为我们所求的那个独一无二的数字。

Python代码实现

def solution(nums):
    unique = 0
    for num in nums:
        unique ^= num
    return unique

测试案例

if __name__ == "__main__":
    print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4)
    print(solution([0, 1, 0, 1, 2]) == 2)
    # 更多测试用例...

使用大模型的感悟

在处理这类问题时,借助像Qwen这样的大语言模型可以帮助快速理解问题背景、提出解决方案以及验证想法的有效性。大模型能够提供多种角度的思考方式,包括但不限于算法设计原则、数据结构选择等。通过与大模型互动,可以促进学习者从理论到实践的转化,加深对计算机科学基础概念的理解。此外,在遇到难题时,大模型还能作为辅助工具,提供启发性的提示或者直接给出可行的解决方案,极大地提高了学习效率和解决问题的能力。然而,重要的是要记得批判性地评估建议方案,确保它们符合实际需求和技术限制。