在列表中查找仅出现一次且所有其他数字恰好出现两次的最佳算法是什么。
因此,在整数列表中(让它作为数组),每个整数精确地重复两次,除了一个。要找到一个,最好的算法是什么。
最快(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”,这是唯一出现一次的“ 1”。
之所以有效,是因为您第一次输入数字时,它会用自身标记num变量,而第二次使用时(或多或少)将其自身标记为num变量。唯一未标记的是您的重复项。