两个数组里找两个相加和为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;
}