如何在向量中查找唯一值 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)
复杂性。
我正在尝试解决一个编码问题,我要检查一个向量是否具有唯一值,如果有,则 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)
复杂性。