📅  最后修改于: 2023-12-03 15:14:01.055000             🧑  作者: Mango
本文介绍如何使用 C++ 编写一个函数,从两个已排序的数组中打印出不常见的元素。
给定两个已排序的数组 A
和 B
,请编写一个函数 printUncommon(A, B)
,该函数可打印出在数组 A
或 B
中但不在两个数组中都出现的元素。
先对两个数组进行合并,然后遍历合并后的数组,将每个元素与它前面和后面的元素进行比较,如果该元素在前面和后面都不存在,则打印该元素。
#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;
}
代码初始设置两个变量 i
和 j
,其起始值为 0
。新建一个空数组 C
,用于存储合并后的数组元素。
通过循环比较两个数组的每个元素,如果 A[i]
小于 B[j]
,则将 A[i]
添加到数组 C
的结尾,并将 i
加 1
,否则将 B[j]
添加到数组 C
的结尾,并将 j
加 1
。
如果 A[i]
等于 B[j]
,则直接将 i
和 j
都加 1
,跳过当前的元素。
最后将 A
和 B
数组中剩余的元素添加到数组 C
的结尾,并在合并后的数组上循环,如果一个元素在前面和后面都不存在,则打印该元素。
以上就是使用 C++ 编写的从两个已排序的数组中打印出不常见的元素的方法。