相关疑难解决方法(0)

在列表中查找单个数字

找到在列表中只出现一次的数字的最佳算法是什么,其中所有其他数字恰好发生两次.

因此,在整数列表中(让它作为一个数组),每个整数重复两次,除了一个.找到那个,什么是最好的算法.

puzzle algorithm

39
推荐指数
3
解决办法
2万
查看次数

查找所有其他元素出现两次的数组中出现一次的元素(不使用 XOR)

我已经尝试解决这个问题很久了,但我似乎无法解决。
问题如下:

给定一个数组 n 个数字,其中所有数字都出现两次,除了一个只出现一次,找出只出现一次的数字。

现在,我在网上找到了很多解决方案,但没有一个满足问题的额外限制。
解决方案应该:

  • 以线性时间运行(又名 O(n))。
  • 不使用哈希表。
  • 假设计算机只支持比较和算术(加、减、乘、除)。
  • 数组中每个数字的位数约为 O(log(n))。

因此,使用 XOR 运算符尝试类似/sf/answers/334079791/的操作是不可能的,因为我们没有 XOR 运算符。由于每个数字的位数大约为 O(log(n)),尝试使用普通算术(逐位)实现 XOR 运算符将需要大约 O(log(n)) 个动作,这将给我们一个整体O(nlog(n)) 的解。

我最接近解决它的是,如果我有办法在线性时间内获得数组中所有唯一值的总和,我可以从总和中减去该总和的两倍以获得(负)仅出现一次的元素的,因为如果出现两次的数字是{A1,A2,...,AK},而出现一次的数量为x时,则整体的总和为
总和= 2(A1 + ... + AK)+ X
就据我所知,集合是使用哈希表实现的,因此使用它们来查找所有唯一值的总和是不好的。

arrays algorithm big-o bit-manipulation time-complexity

4
推荐指数
1
解决办法
161
查看次数