分析
-
本题的考点:哈希表。
-
将数组
a、b
中的数据放入哈希表S
中,然后遍历a、b
所有的可能组合方式,如果两个数之和不在哈希表中,输出结果,然后退出即可。 -
另一种解法,因为数组中的数据都是大于
0
的,因此将两个数组中的最大值相加一定不会在a、b
中。使用Java
实现这种方式。
代码
- C++
#include <iostream>
#include <unordered_set>
using namespace std;
const int N = 110;
int n, m;
int a[N], b[N];
unordered_set<int> S;
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i], S.insert(a[i]);
cin >> m;
for (int i = 0; i < m; i++) cin >> b[i], S.insert(b[i]);
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (!S.count(a[i] + b[j])) {
cout << a[i] << " " << b[j] << endl;
return 0;
}
return 0;
}
- Java
import java.util.*;
public class Main {
static int n, m;
public static void main(String[] args) {
int x = 0, y = 0;
Scanner sn = new Scanner(System.in);
n = sn.nextInt();
for (int i = 0; i < n; i++) x = Math.max(x, sn.nextInt());
m = sn.nextInt();
for (int i = 0; i < m; i++) y = Math.max(y, sn.nextInt());
sn.close();
System.out.println(x + " " + y);
}
}
时空复杂度分析
-
时间复杂度:$O(n \times m)$,
n、m
为两个数组的长度。另一种解法:$O(n + m)$。 -
空间复杂度:$O(n + m)$。