/*
* 找一对数
*
* 例题1:
* 输入 n(n<100,000)个整数,找出其中的两个数,他们之和等于整数 m
* (假定肯定有解)。题中所有的整数能用 int 表示。
*
* 解法:
* 1) 将数组排序,复杂度是 O(n * log(n))。
* 2) 查找时,设置两个变量 i 和 j,i=0, j=n-1; 如果 a[i]+a[j] > m
* j-1,小于则 i+1, 直至a[i]+a[j] = m,复杂度 O(n)。
*
**/
#include <stdio.h>
#define <stdlib.h>
int main(void)
{
// 读入数据
int m;
scanf("%d", &m);
int n;
scanf("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n);
for (int i=0; i<n; i++){
scanf("%d", &arr[i]);
}
// 排序
qsort(arr, n, sizeof(int), Compare);
// 查找符合条件的两个数
int i = 0, j = n-1;
while (arr[i] + arr[j] != m){
if (arr[i] + arr[j] > m){
j--;
} else {
i++;
}
}
printf("%d + %d = %d", arr[i], arr[j], m);
}
网友评论