【问题标题】:How to find unpaired element in unsorted array with clear O(n) runtime and memory? [duplicate]如何在具有明确 O(n) 运行时间和内存的未排序数组中找到未配对元素? [复制]
【发布时间】: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) 运行时和内存来做到这一点。 如何做到这一点?

【问题讨论】:

    标签: arrays algorithm hashmap


    【解决方案1】:

    您可以选择按位异或,因为它是可交换的,最终结果将是所需的答案。您只需要遍历数组一次,这里是它的代码:- 整数分辨率 = 0; for(int i : arr) res ^= i;

    【讨论】:

    • 这是一个重复的问题...
    猜你喜欢
    • 1970-01-01
    • 2017-01-26
    • 2013-02-03
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多