c++ - 如何检查 O(N) 时间复杂度的多重集中是否有 2 个或多个具有相同值的元素?
问题描述
我有一个带有一些值的多集/任何容器,例如 {1,2,3,4,5,5} -> 这将返回一些值;{1,2,3,4,5} --> 将返回一些其他值;
我试图找出容器中是否有任何重复项,时间复杂度为 O(N)。
解决方案
由于std::multiset
是有序容器,因此任何重复项都是连续的。该std::adjacent_find
算法搜索连续相同的元素(线性复杂度)。
这是一个简单的布尔函数,用于测试重复int
值。
#include <algorithm>
bool has_duplicates(const std::multiset<int> &mset)
{
return std::adjacent_find(mset.begin(), mset.end()) != mset.end();
}
推荐阅读
- android - 如何在我的 recyclerview 中使用 cardview 设置 onclick 侦听器,并在我单击 recyclerview 时从 firebase 数据库中检索数据?
- c - scanf() 不等待循环中的字符串输入
- vue.js - Nuxt Apollo GraphQL 错误:未提供所需类型的变量
- reactjs - 从编辑页面切换到新创建页面时出现错误“无法添加属性 0,对象不可扩展”
- sendmail - Sendmail,可以验证发件人吗?
- ios - 插入分组单元格空间
- pandas - 模块 Pandas 没有属性 Dataframe
- python-3.x - 如何在 django 中正确创建 InMemoryUploadedFile 对象
- laravel - laravel-translatable 不适用于 vue
- java - 使用 OpenPDF 居中和格式化文本