在C ++中的三个排序数组中查找公共元素

假设我们有三个带有某些元素的数组。我们必须找到这三个数组中存在的所有常见元素。假设这些元素是[10、12、15、20、25],[10、12、13、15]和[10、12、15、24、25、26],则这三个数组中的公共元素为10 ,12和15。

假设在数组A1中遍历的当前元素为x,A2为y,A3为z。我们可以为他们提供以下情况-

  • 如果x,y和z相同,则我们将打印其中的任何一个,并将每个数组元素增加1

  • 当x <y时,由于x不能成为公共元素,因此我们将在A1中前进

  • 当x> z和y> z时,我们将继续前进到A3,因为z不能是一个公共元素。

示例

#include<iostream>
using namespace std;
void findCommonValues(int A1[], int A2[], int A3[], int n1, int n2, int n3) {
   int i = 0, j = 0, k = 0;
   while (i < n1 && j < n2 && k < n3) {
      if (A1[i] == A2[j] && A2[j] == A3[k]) {
         cout << A1[i] << " "; i++; j++; k++;
      }
      else if (A1[i] < A2[j])
         i++;
      else if (A2[j] < A3[k])
         j++;
      else
         k++;
   }
}
int main() {
   int A1[] = {10, 12, 15, 20, 25};
   int n1 = sizeof(A1)/sizeof(A1[0]);
   int A2[] = {10, 12, 13, 15};
   int n2 = sizeof(A2)/sizeof(A2[0]);
   int A3[] = {10, 12, 15, 24, 25, 26};
   int n3 = sizeof(A3)/sizeof(A3[0]);
   cout << "Common elements are: ";
   findCommonValues(A1, A2, A3, n1, n2, n3);
}

输出结果

Common elements are: 10 12 15