【题目27】求两个排序数组的交集

注:此题来源于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++代码实现:

#include <stdio.h> void Set_Intersection(int* a, int lenA, int *b,int lenB) { int i = 0; int j = 0; while(i < lenA && j < lenB) { if(*(a+i) < *(b+j)) ++i; else if(*(a+i) > *(b+j)) ++j; else { printf("%d ", *(a+i)); ++i; ++j; } } } int main() { int a[] = {1,3,5,7,9,11}; int b[] = {1,1,2,3,5,8,13}; int lenA = sizeof(a)/sizeof(int); int lenB = sizeof(b)/sizeof(int); Set_Intersection(a,lenA,b,lenB); return 0; }

 

你可能感兴趣的:(c)