给定两个整型数组,本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数n(≤20),随后是n个整数,其间以空格分隔。 输出格式: 在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。
时间: 2023-05-31 13:18:28 浏览: 98
### 回答1:
题目要求找出不是两个整型数组共有的元素。输入格式:输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),表示数组长度,接下来N个整数表示数组中的元素,以空格分隔。题目保证每个数组的元素都各不相同。输出格式:按照输入格式的输出要求,按照数字顺序输出不是两个数组共有的元素,数字间以空格分隔,但行末不能有多余空格。题目保证同一行输出的数字不重复,且按照递增顺序输出。
### 回答2:
题目分析:
本题需要找到两个数组中不同的元素,可以先将两个数组合并成一个,再使用哈希表记录每个元素出现的次数,最后遍历哈希表输出只出现过一次的元素。
算法流程:
1.输入两个整型数组以及数组的长度
2.将两个数组合并成一个数组
3.使用哈希表记录每个元素出现的次数
4.遍历哈希表,输出只出现过一次的元素
算法实现:
```python
#python3
n1 = int(input())
a = list(map(int, input().split()))
n2 = int(input())
b = list(map(int, input().split()))
h = {} #哈希表
#遍历数组a,统计每个元素出现的次数
for i in range(n1):
h[a[i]] = h.get(a[i], 0) + 1
#遍历数组b,统计每个元素出现的次数
for i in range(n2):
h[b[i]] = h.get(b[i], 0) + 1
ans = []
#遍历哈希表,输出只出现过一次的元素
for key, value in h.items():
if value == 1:
ans.append(key)
#输出结果
print(*ans)
```
时间复杂度:O(n)
空间复杂度:O(n)
总结:
本题需要解决两个数组的合并以及哈希表的使用,适合巩固基础数据结构的练习。
### 回答3:
题目分析:
本题要求我们找出不是两个整型数组共有的元素。我们可以先把两个数组都存储到一个数组中,然后遍历这个数组,如果一个元素在两个数组中都没有出现过,则将其输出。
代码实现:
下面是我的代码实现,我用了一个辅助数组 `isVisited` 来记录每个元素是否已经访问过了,以避免重复输出。
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n;
vector<int> arr1(n);
for (int i = 0; i < n; i++) {
cin >> arr1[i];
}
cin >> m;
vector<int> arr2(m);
for (int i = 0; i < m; i++) {
cin >> arr2[i];
}
vector<int> arr;
for (int i = 0; i < n; i++) {
arr.push_back(arr1[i]);
}
for (int i = 0; i < m; i++) {
arr.push_back(arr2[i]);
}
vector<bool> isVisited(arr.size(), false);
for (int i = 0; i < arr.size(); i++) {
if (!isVisited[i]) {
bool flag = true;
for (int j = 0; j < n; j++) {
if (arr[i] == arr1[j]) {
flag = false;
break;
}
}
for (int j = 0; j < m && flag; j++) {
if (arr[i] == arr2[j]) {
flag = false;
break;
}
}
if (flag) {
cout << arr[i] << " ";
isVisited[i] = true;
}
}
}
return 0;
}
```
时间复杂度为 $O(nm)$,其中 $n$ 和 $m$ 分别为两个数组的长度。