当前位置:  开发笔记 > 编程语言 > 正文

从对矢量中获取唯一元素的有效方法

如何解决《从对矢量中获取唯一元素的有效方法》经验,为你挑选了1个好方法。

我有一对整数对的向量,看起来像这样:

(0, 1)
(1, 9)
(2, 3)
(6, 1)
(4, 0)

我想从那里提取独特的元素,因此结果如下所示:(
??0?, 1, 9, 2, 3, 6, 4 基本上只是所有数字都没有重复)

目前我正是这样做的:

std::vector getElements(std::vector> S) {
    std::vector V;
    for (std::vector>::iterator i = S.begin(); i != S.end(); i++) {
        if (std::find(V.begin(), V.end(), i->first) == V.end()) {
            V.push_back(i->first);
        }
        if (std::find(V.begin(), V.end(), i->second) == V.end()) {
            V.push_back(i->second);
        }
    }
    return V;
}

有没有更有效的方法呢?



1> WhiZTiM..:

您当前的解决方案是O(n^2).您可以通过使用存储已经看到的数字来将已经看到的元素的线性扫描减少到摊销; 这将改善您的运行时间.O(1)std::unordered_setO(n)

这是一个改进的算法:

std::vector getElements(std::vector> S) {
    std::unordered_set ss;
    std::for_each(S.begin(), S.end(), [&ss](const auto& p) {
        ss.insert(p.first);
        ss.insert(p.second);
    });
    return std::vector(ss.begin(), ss.end());
}

查看Live On Coliru示例

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有