【发布时间】:2021-03-31 00:44:55
【问题描述】:
Yandex 面试问题:“你得到了一个数组,其中除了 1 之外的所有元素都重复了两次。你应该找到这个不成对的元素。例如:{2, 5, 2, 3, 4, 4, 5}。
我的解决方案是使用 HashMap 来存储每个元素的次数 进入数组。 C++ 代码如下:
unordered_map<long long, long long> m;
for (int i = 0; i < n; i++)
m[a[i]]++;
for (int i = 0; i < n; i++)
if (m[a[i]] == 1) {
cout << a[i];
return 0;
}
这种方式复杂度为 O(n),但使用了 hashmap。面试官说 可以在没有 hashmap 或类似数据结构的情况下使用明确的 O(n) 运行时和内存来做到这一点。 如何做到这一点?
【问题讨论】: