两个数组里找两个相加和为N的组合(答案只有一个)
Updated:
Contents
题目:
在两个数组中找两个相加和为N的组合,答案只有一个
暴力O(n*m)
- 使用辅助数组保存sum-b[i]的值,优化到O(n+m)
#include
int sum, m, n;
int a[100], b[100];
int main()
{
int c[100];
scanf(“%d%d”, &m, &n);
scanf(“%d”, &sum);
//输入两个排好序的数组
for(int i = 0; i < m; i++)
scanf(“%d”, &a[i]);
for(int i = 0; i < n; i++)
scanf(“%d”, &b[i]);
for(int i = 0; i < n; i++)
c[i] = sum - b[i]; //使用辅助数组保存sum-b[i]的值
int L = 0, R = m - 1;
while(L < m && R >= 0){
if(c[R] < a[L])
R--;//不可能出现这个数了
else if(c[R] > a[L])
L++;//可能出现这个数
else{
printf("数组1中的: %d 数组2中的: %d\n", a[L], sum - a[L]);
L++;
R--;
}
}
return 0;
}