给定一串递增数列,找到其中两个不同的数字 a[i] 和 a[j],使得a[i] + a[j] = k,并输出较小的那个数
如果有组a[i] 和 a[j] 满足条件,则输出其中数值最小的数,如果没有找到,输出-1
输入
输入为一串递增数组 a 和一个正整数 k,其中
1 <= a.length <= 10^5
1 <= a[i] <= 10^6
1 <= k <= 10^6
输出
输出为一个整数,表示在递增数组 a 中找到的两个相加和等于 k中较小的那个数,如果找到多组这样的数,输出值最小的那个数。
没有找到输出 -1
输入样例 1
a = [1, 2, 4, 8, 10], k = 12
输出样例 1
2
解释:
有 2 + 10 = 12 和 4 + 8 = 12,
其中最小的数为 2
//n表示数组a的长度
int solve(int* a, int n, int k) {
}
#define N 10*10*10*10*10
int solve(int* a, int n, int k)
{
int c[N],s=0;
for (int i = 0; i < n/2+1; i++)
{
for (int j = 0; j < n; j++)
{
if (a[i] + a[j] == k)
{
c[++s] = a[i]<a[j]?a[i]:a[j];
break;
}
}
}
if (s != 0)
return c[1];
else
return -1;
}