在 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 時,我們將繼續在 A1 中前進,因為 x 不能是公共元素

  • 當 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

更新於: 19-Dec-2019

582 次瀏覽

啟動你的 職業

完成課程獲得認證

開始吧
廣告