有序数组A,B,求A中哪些元素在B中

/*
 * 给定两个排好序的数组A,B,大小分别为n,m。给出一个高效算法查找A中的哪些元素存在B数组中。
 *
 * 方法一:一般在大数组中执行二分查找,将小数组的元素作为需查找的对象。复杂度为 N*log(M)
 *
 * 方法二:可以使用两个指针遍历AB,比较当前大小就可以了...时间复杂度o(n+m)
 */

 

解法如上述所给方法所示,现实现方法二的代码如下所示~

 

#include <iostream>
using namespace std;

int arrA[] = {1,2,3,3,3,3,4,5,5,5,6,7,7,7,8};
int arrB[] = {2,3,4,6,8,12,23,45};     //查找A中哪些元素在B中

void solve(int lenA, int lenB)
{
	int j = 0;
	for(int i=0; i<lenA; i++)
	{	
		for(; j<lenB; j++)    //j 保持指向上次查询完移动到的位置
		{
			if(arrA[i] < arrB[j])  //数组A的元素比数组B的首元素 小,跳出内层循环
			{	
				break;
			}
			else if(arrA[i] == arrB[j])  //A中的元素出现在B中,将其输出,然后A中元素继续向后判断,此时j值不变  
			{
				cout<<arrA[i]<<" ";
				break;
			}
			else  //数组A的元素比数组B的首元素 大,内层循环continue 
			{
				continue;
			}
		}
	}
}

int main()
{
	int lenA = sizeof(arrA) / sizeof(int);
	int lenB = sizeof(arrB) / sizeof(int);
	solve(lenA, lenB);
}


 

欢迎读者留言探讨~O(∩_∩)O~

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值