两个有序序列的共同元素
来源:互联网 发布:重庆望江工业公司 知乎 编辑:程序博客网 时间:2024/06/06 12:44
问题:
给定两个已排序序列,找出共同的元素.设分别为A,B,数组长度分别为M,N
方法1:
定义两个指针分别指向序列的开始。如果指向的两个元素相等,则找到一个相同的元素;如果不等,则将指向较小元素的指针向前移动。重复执行上面的步骤,直到有一个指针指向序列尾端。
大致的code:
void CommonElem(const int *A,int ASize,const int *B,int BSize,vector<int>& common)
{
int i=0,j=0;
while(i<ASize && j<BSize)
{
if(A[i] == B[j])
{
common.push_back(A[i]);
++i,++j;
}
else if(A[i] > B[j]) ++j;
else ++i;
}
}
时间复杂度:O(M+N)
方法2:遍历一个元素个数较小的数组A,对于A[i],在另外一个数组B中二分查找A[i].
而且二分还是可以优化的,如果找到了,就可以重新设置二分查找的低位,没有找到则不变。因为两个数组都是已排序的,下一个出现的数字一定会在当前出现的数字之后。
时间复杂度:小于min(M,N)*log(max(M,N))
当两个数组长度接近时候使用方法1,当一个数组长度远大于另外一个的时候使用方法2,当然使用方法2的限制是元素序列是顺序存储。
- 两个有序序列的共同元素
- 给定两个已排序序列,找出共同的元素
- 给定两个已排序序列,找出共同的元素
- 整型数组处理算法(五)求两个有序数组的共同元素
- 两个有序序列的中位数
- 两个有序序列的中位数
- 寻找三个有序数组的共同最小元素
- 两个集合有共同元素,其中一个集合删除两个集合共同的元素
- 数据结构面试题总结4——数组:求两个有序数组中的共同元素
- 求两个有序数组的共有元素
- 两个有序序列的合并算法
- pat 两个有序序列的中位数
- PAT 两个有序序列的中位数
- 【C】两个有序序列的中位数
- 两个有序链表序列的合并
- PTA5-53 两个有序序列的中位数
- 两个有序链表序列的合并
- 两个有序链表序列的合并
- windos下viennaCL安装
- xp 开发人员不得不要的两个软件
- 单链线性表的创建,元素的插入删除以及合并
- 杭电OJ题1033 The 3n + 1 problem解题报告
- 去除GridView点击后的背景
- 两个有序序列的共同元素
- 芯片驱动问题定位思路总结之一单板重启的问题
- COCOS2D-X跨ANDROID&IOS平台开发入门教程
- 浅谈保存一个文件操作内部发生了什么
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- ADT-20 新的目录规范自动识别libs为库目录导致debug出现NoClassDefFoundError
- 黑马程序员之C#学习笔记:数组的复制四种方法
- java中遍历HashMap的方法
- 匿名共享内存Ashmem实例--C++