algorithm - 在列表中查找单个数字

标签 algorithm puzzle

查找列表中仅出现一次的数字(而所有其他数字恰好出现两次)的最佳算法是什么。

因此,在整数列表中(让我们将其视为数组),每个整数恰好重复两次,除了一次。为了找到那个,最好的算法是什么。

最佳答案

最快 (O(n)) 和内存效率最高 (O(1)) 的方法是 XOR 运算。

在 C 中:

int arr[] = {3, 2, 5, 2, 1, 5, 3};

int num = 0, i;

for (i=0; i < 7; i++)
    num ^= arr[i];

printf("%i\n", num);

这会打印“1”,这是唯一出现一次的。

这是有效的,因为第一次输入数字时,它会用自身标记 num 变量,第二次它会用自身取消标记 num (或多或少)。唯一未标记的是您的非重复项。

关于algorithm - 在列表中查找单个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9372621/

相关文章:

math - 一道有趣的数学题

java - 数字谜题解决方案的数字平方和可以进一步优化吗?

java - 编程问题-抛硬币

python - 流浪之星-codeabbey任务

python - 如何在文本文件中找到最相关的字符串?

php - 从给定的多组集合中找出最佳组合

java - 如何在函数式分而治之 Java 算法中实现函数 "divide"?

c - 二元矩阵两点之间的最短路径

c# - 根据路径将文件节点添加到树中

java - 在数组中找到最大值的预期赋值次数