📌  相关文章
📜  C++ 程序从两个排序数组中打印不常见的元素(1)

📅  最后修改于: 2023-12-03 15:14:01.055000             🧑  作者: Mango

C++ 程序从两个排序数组中打印不常见的元素

本文介绍如何使用 C++ 编写一个函数,从两个已排序的数组中打印出不常见的元素。

题目描述

给定两个已排序的数组 AB,请编写一个函数 printUncommon(A, B),该函数可打印出在数组 AB 中但不在两个数组中都出现的元素。

思路

先对两个数组进行合并,然后遍历合并后的数组,将每个元素与它前面和后面的元素进行比较,如果该元素在前面和后面都不存在,则打印该元素。

代码实现
#include <iostream>
using namespace std;

void printUncommon(int A[], int n, int B[], int m) {
  int C[n + m];
  int i = 0, j = 0, k = 0;
  while (i < n && j < m) {
    if (A[i] < B[j]) {
      C[k++] = A[i++];
    } else if (A[i] > B[j]) {
      C[k++] = B[j++];
    } else {
      i++;
      j++;
    }
  }
  while (i < n) {
    C[k++] = A[i++];
  }
  while (j < m) {
    C[k++] = B[j++];
  }
  for (int i = 0; i < n + m; i++) {
    bool found = false;
    for (int j = 0; j < i; j++) {
      if (C[j] == C[i]) {
        found = true;
        break;
      }
    }
    if (!found) {
      bool uncommon = true;
      for (int j = i + 1; j < n + m; j++) {
        if (C[j] == C[i]) {
          uncommon = false;
        }
      }
      if (uncommon) {
        cout << C[i] << " ";
      }
    }
  }
  cout << endl;
}

int main() {
  int A[] = {1, 2, 3, 4, 5};
  int B[] = {3, 4, 5, 6, 7};
  int n = sizeof(A) / sizeof(A[0]);
  int m = sizeof(B) / sizeof(B[0]);
  printUncommon(A, n, B, m);
  return 0;
}

代码初始设置两个变量 ij,其起始值为 0。新建一个空数组 C,用于存储合并后的数组元素。

通过循环比较两个数组的每个元素,如果 A[i] 小于 B[j],则将 A[i] 添加到数组 C 的结尾,并将 i1,否则将 B[j] 添加到数组 C 的结尾,并将 j1

如果 A[i] 等于 B[j],则直接将 ij 都加 1,跳过当前的元素。

最后将 AB 数组中剩余的元素添加到数组 C 的结尾,并在合并后的数组上循环,如果一个元素在前面和后面都不存在,则打印该元素。

结论

以上就是使用 C++ 编写的从两个已排序的数组中打印出不常见的元素的方法。