📜  资质|算术能力|问题6(1)

📅  最后修改于: 2023-12-03 14:57:48.575000             🧑  作者: Mango

资质 | 算术能力 | 问题6

简介

在招聘程序员时,资质和算术能力对于确定应聘者的适合程度非常重要。在问题6中,我们将对应聘者的算术能力进行考察,以检验其在解决问题时的思维逻辑和分析能力。

问题

有一个整数数组,其中每个元素都出现两次,但有一个元素只出现了一次。找出只出现一次的元素。要求时间复杂度为O(n)。

解决方案

可通过异或运算解决,异或运算符(^)用来判断两个二进制数的每一位是否相同,如果相同则结果为0,不同则为1。

def single_number(nums):
    result = 0
    for num in nums:
        result ^= num
    return result
解析

我们将所有数字进行异或运算,最终结果即为只出现一次的数字。如下图所示:

[2, 3, 4, 3, 4]
  0010  # 2
^ 0011  # 3
  ----
  0001

  0001  # 1
^ 0100  # 4
  ----
  0101

  0101  # 5
^ 0011  # 3
  ----
  0110  # 6

时间复杂度为O(n),空间复杂度为O(1)。