Contents
  1. 1. 题目:

题目:

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

}

Contents
  1. 1. 题目: