求两个排序数组的交集

注:此题来源于CSDN论坛,解法也是来源于论坛上的讨论,非原创,特此声明

题目: 有两个数组a{1,5,8,10,14,15,17,18,20,22,24,25,28}和b{2,4,6,8,10,12},

如何求出他们之间的交集?要求效率越高越好,数组都是从小到大排序好的。

 

此题解法的详细说明可以参考侯捷的《STL源码剖析》书中第333页。此解法与论坛上说给

出的解法相同。

C++代码实现:

[cpp]  view plain copy
  1. #include <stdio.h>  
  2. void Set_Intersection(int* a, int lenA, int *b,int lenB)  
  3. {     
  4.     int i = 0;  
  5.     int j = 0;  
  6.     while(i < lenA && j < lenB)  
  7.     {  
  8.         if(*(a+i) < *(b+j))  
  9.             ++i;  
  10.         else if(*(a+i) > *(b+j))  
  11.             ++j;  
  12.         else  
  13.         {  
  14.             printf("%d ", *(a+i));  
  15.             ++i;  
  16.             ++j;  
  17.         }  
  18.     }  
  19. }  
  20. int main()  
  21. {  
  22.     int a[] = {1,3,5,7,9,11};  
  23.     int b[] = {1,1,2,3,5,8,13};  
  24.     int lenA = sizeof(a)/sizeof(int);  
  25.     int lenB = sizeof(b)/sizeof(int);  
  26.     Set_Intersection(a,lenA,b,lenB);  
  27.     return 0;  
  28. }  

PHP代码

<?php 
//获取2个   排序后   的数组交集
//注意 是排序后
$a = array(1,2,3,4,5);
$b = array(2,3,5,6,7);
function  gwyy(&$a,&$b) {
	$i = $j = 0;
	while($i < count($a) && $j < count($b) ) {
		
		if($a[$i] < $b[$j]) {
			++$i;
		} else if ($a[$i] > $b[$j]) {
			++$j;
		} else {	
			echo  '交集'.$a[$i].'<br />';
			++$i;
			++$j;	
		}	
	}
}
gwyy($a,$b);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值