给定长度不同的序列找到了它们每个人共有的最大数字序列
Given sequence of different length find the largest sequence of numbers common to every one of them
我有一个问题,我尝试了很多想法,但找不到最佳解决方案。
问题是:
给出了一系列n个数字的顺序,均以增加的顺序排序,但长度不同,找到每个数字的最大子序列。
例如,可以说有3个序列A,B和C,
其中
A = {1 3 5 7 9 10 11 15 30 43 44 45 50}
B = {1 2 3 7 8 10 11 12 23 27 30 38 40 41 45 50 51 53 }
C = {0 1 3 7 9 11 12 13 14 19 20 24 28 30 50 51 61 90 99}
因此,所有这些的最大共同子序列是:
Answer = {1 3 7 11 30 50}
上面的示例说明了我要传达的想法。我如何找到如此最大的常见子序列,全部均以越来越多的顺序?
感谢您的时间和考虑阅读这篇文章。如果您也能提供建议,我将非常感谢。
简单解决方案:您可以合并所有集合(线性复杂度(,然后计算最终集合中n次发生的数字(再次是线性复杂性(。
使用std :: multiset(具有重复(并合并为算法。
在这里尝试:
#include <iostream>
#include <set>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// your code goes here
std::multiset<int> a {1,2,3};
std::multiset<int> b {1,2,3};
std::multiset<int> result;
merge( a.begin(), a.end(), b.begin(), b.end(),
std::inserter(result, result.begin()));
std::cout<<result.size()<<std::endl;
return 0;
}
结果:
成功时间:0内存:16064信号:0
6
设定语义的语义扩展到了多序(如下所述(,但并非以我一直以来的方式。
接受两个多组的联合的操作应该是 与合并两组的操作区别。想象一下 参数集包含元素7的三个实例,第二个实例 集合包含两个相同值的实例。工会将包含 只有三个这样的值,而合并将包含五个。
根据标准,25.3.5:
通过定义联合((,以标准方式将设定操作的语义概括为多组,以包含最大数量 出现每个元素,相交((包含最小值, 等等。
相关文章:
- C++ 为每个结构{人}条目创建文件
- CreateProcess在退出后占用套接字端口(每个套接字地址只允许使用一次)
- 指向结构中的数组的指针,其中每个字段都是一个动态数组
- C++ 每个派生类的分隔静态字段
- 人脸识别:每个人的所有图像都必须相同吗?
- 如何使用C++共享目录,以便每个人都可以访问
- C++创建一个链表,每个节点有超过 2 个字段
- 模拟一个函数,该函数像操作员=和破坏者一样传播到每个字段
- 从CSV文件中提取每个条目字段的最佳方法是什么
- 给定长度不同的序列找到了它们每个人共有的最大数字序列
- 从结构向量中,获取一个向量,该向量收集每个结构的一个字段
- 我如何调用我的3个数据成员中每个人的设置方法,然后显示由我的设置方法设置的值
- 每个线程或每个调用一个 ZeroMQ 套接字
- 为什么编译器在每个字符串字面的C 的末端附加null字符
- open() 的参数:每个人都应该拥有对文件的所有访问权限,并且应该在创建时被截断
- 如何创建具有4个字段和每个字段9个字符长度的矢量对象
- Cpp服务器,每个客户端的UDP套接字
- 不能与每个人一起工作
- 除了班级之外的每个人都不变,有这样的事情吗?
- 使用Windows和c++的chrono为每个人安排一个1毫秒的事件——我是不是要求太多了?