找单独的数解题分析|青训营笔记

53 阅读1分钟

解题思路

问题分析

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

要求

  1. 设计一个算法,使其时间复杂度为O(n),其中n是班级的人数。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

算法设计

由于所有数字都恰好出现了两次,只有一个是独特的,我们可以利用这个特性来简化问题。具体步骤如下:

  1. 初始化变量:定义两个整型变量a和b分别代表两个不同的数。
  2. 计算异或值:通过循环遍历每一位同学的卡片数字,对每个数字进行异或操作。因为相同的数字会相互抵消(即x ^ x = 0),最终得到的异或结果就是那个只出现一次的独特数字。
  3. 返回结果:输出经过异或操作得到的结果,即为所求的独特数字。

复杂度分析

  • 时间复杂度:O(n),其中n是数组nums的长度。我们只需要遍历一遍数组即可完成求解。
  • 空间复杂度:O(1)。我们没有使用任何额外的存储空间,只是进行了常数级别的变量操作。

这种解法充分利用了位运算的性质,特别是异或操作的特性,使得在不需要排序或额外哈希表的情况下就能高效地解决问题。