C++程序 打印两个排序数组中不常见的元素
给定两个不同元素的排序数组,我们需要打印来自两个数组的不常见元素。输出应以排序顺序打印。
示例:
输入: arr1[] = {10, 20, 30}
arr2[] = {20, 25, 30, 40, 50}
输出: 10 25 40 50
因为20和30在两个数组中都存在, 所以不打印这些元素。
输入: arr1[] = {10, 20, 30}
arr2[] = {40, 50}
输出: 10 20 30 40 50
这个想法基于合并排序的合并过程。我们遍历这两个数组并跳过共同的元素。
// C++ program to find uncommon elements of
// two sorted arrays
#include <bits/stdc++.h>
using namespace std;
void printUncommon(int arr1[], int arr2[],
int n1, int n2)
{
int i = 0, j = 0, k = 0;
while (i < n1 && j < n2) {
// If not common, print smaller
if (arr1[i] < arr2[j]) {
cout << arr1[i] << " ";
i++;
k++;
}
else if (arr2[j] < arr1[i]) {
cout << arr2[j] << " ";
k++;
j++;
}
// 跳过共同的元素
else {
i++;
j++;
}
}
// 打印剩余元素
while (i < n1) {
cout << arr1[i] << " ";
i++;
k++;
}
while (j < n2) {
cout << arr2[j] << " ";
j++;
k++;
}
}
// 主函数
int main()
{
int arr1[] = {10, 20, 30};
int arr2[] = {20, 25, 30, 40, 50};
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int n2 = sizeof(arr2) / sizeof(arr2[0]);
printUncommon(arr1, arr2, n1, n2);
return 0;
}
输出:
10 25 40 50
时间复杂度: O(n1 + n2),其中n1和n2表示给定两个数组的大小。
辅助空间:O(1),不需要额外空间,因此它是一个常量。