有没有快速的方法来查找一个元素向量中所有只出现一次的单个元素? 向量中的所有元素都是单个或双重(出现两次)。 我的答案是将所有元素排序,然后删除出现两次的元素。 有更快的方法吗?
因此,对于足够小的 n(<=1e8),排序和删除(使用 std::sort()
和 std::unique
)方法仍然比哈希表更快。
示例代码:O(n log n)
vector<int>A = {1,2,3,1,2,5};
sort(A.begin(),A.end());
A.erase(unique(A.begin(),A.end()),A.end());
for(int&x:A)
cout<<x<<" ";
std::unordered_map<T, int>
来存储每个元素的计数,这将在平均线性时间内完成:template<typename T>
std::vector<T> uniqueElements(const std::vector<T>& v) {
std::unordered_map<T, int> counts;
for(const auto& elem : v) ++counts[elem];
std::vector<T> result;
for(auto [elem, count] : counts)
if(count == 1)
result.push_back(elem);
return result;
}
seen[arr[i]]=1
,然后遍历seen
数组从1到100,然后打印所有元素,如果seen[i]
为1。 - Mayur