如何在向量中查找唯一值 C++

How to find unique values in a vector c++

我正在尝试解决一个编码问题,我要检查一个向量是否具有唯一值,如果有,则 return true else false。

到目前为止,我想到了使用嵌套循环,您可以在其中将第一个与最后一个进行比较,但我想知道 C++ 是否还有其他功能,然后执行 o(n^2) 类型的迭代。我看到c++有一个unique函数,但是那会删除unique值。

示例 1:

输入:nums = [1,2,3,1] 输出:真 示例 2:

输入:nums = [1,2,3,4] 输出:假

您需要创建“集合”结构, 它可以从向量中插入值而不插入重复值, 所以你可以检查集合的大小和向量是否匹配。

set<int> st;
for (auto i : nums)
    st.insert(i);
return st.size() == nums.size();

std::unique 检查连续的重复项并将它们移动到范围的末尾。它不会将它们从向量中移除。无论如何你可以复制。它还 returns 一个指向唯一值范围末尾的迭代器(现在位于向量的前面):

#include <iostream>
#include <vector>
#include <algorithm>

bool only_unique(std::vector<int> v) {
    std::sort(v.begin(),v.end());
    return std::unique(v.begin(),v.end()) == v.end();
}

int main(){
    std::cout << only_unique({1,2,3,1});  
    std::cout << only_unique({1,2,3,4});      
}

如果您不想使用额外的内存,您可以将参数更改为引用。目前,only_unique 保留参数不变。即使向量通过引用传递,重复项仍将存在(只是在不同的位置)。这具有 O(n log n) 复杂性。