同时求交集和差集
来源:互联网 发布:安装打印机没有usb端口 编辑:程序博客网 时间:2024/05/24 07:19
已知文件中的对象号集合,为了求出新文件相对于老文件的增删改,只需要求出对象号的交集和差集即可。
STL 算法已有 set_interection 和 set_difference 用于计算交集和差集,但是如果直接使用 STL 算法的话,必须调用 set_interection 1次,以及 set_difference 2次,总共需要遍历3次。为了降低时间复杂度,可以在一个函数里把交集和差集都求出来,这样只需要遍历一次就可以了。
代码如下:
// 传入的 inter,del,add 的 size 必须是 0.void GetIntersectionAndDifferences(const std::vector<int>& lhs, const std::vector<int>& rhs, std::vector<int>& inter, std::vector<int>& del, std::vector<int>& add) { if (lhs.empty() || rhs.empty() || lhs.back() < rhs.front() || rhs.back() < lhs.front()) { del = lhs; add = rhs; return; } inter.reserve(std::min(lhs.size(), rhs.size())); del.reserve(lhs.size()); add.reserve(rhs.size()); auto lhs_iter = lhs.begin(); auto rhs_iter = rhs.begin(); while (lhs_iter != lhs.end() && rhs_iter != rhs.end()) { if (*lhs_iter < *rhs_iter) { del.push_back(*lhs_iter); ++lhs_iter; } else if (*rhs_iter < *lhs_iter) { add.push_back(*rhs_iter); ++rhs_iter; } else { inter.push_back(*lhs_iter); ++lhs_iter; ++rhs_iter; } } for (; lhs_iter != lhs.end(); ++lhs_iter) del.push_back(*lhs_iter); for (; rhs_iter != rhs.end(); ++rhs_iter) add.push_back(*rhs_iter); inter.reserve(inter.size()); del.reserve(del.size()); add.reserve(add.size());}
0 0
- 同时求交集和差集
- 求交集,差集
- 求交集、并集和差集
- sql 求交集,差集
- 求两个集合的交集、差集和并集
- JAVA求字符串数组交集、并集和差集
- JAVA求字符串数组交集、并集和差集
- JAVA求字符串数组交集、并集和差集
- JAVA求字符串数组交集、并集和差集
- JAVA求字符串数组交集、并集和差集
- 求两个list的交集和差集
- PHP求数组的差集和交集
- Python 求两个 list 的交集和差集
- 求两个有序链表的交集和差集
- java求集合的并集、交集、补集、差集和对称差集
- C#求交集差集并集
- Linux 求文件交集 差集等
- 如何求两个文件的交集、并集和差集?------sort和uniq闪亮登场
- 当推荐系统遇上深度学习
- 重装MySQL
- mysql 命令行补全工具 mycli
- 我的Android工作笔记
- SSD对HADOOP集群性能提升 调研及测试计划
- 同时求交集和差集
- Android截屏方式
- Spring监听器之-----org.springframework.web.context.ContextLoaderListener
- Ubuntu下JDK配置和安装
- Android Studio:创建类时,添加作者名和日期等
- 卷积神经网络Step by Step(二)
- SDUT 3893 威佐夫+nim博弈(第八届山东ACM省赛A题)
- 文件权限的那些事儿(1)linux文件权限
- 工厂模式