问题描述:
一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum O(nlogn)
解题思路:
先排序 在左右夹击判断。
/*
一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum O(nlogn)
解题思路:先排序 在左右夹击判断
*/
#include <stdio.h>
int find(int a[], int len, int sum, int *x, int *y)
{
int i = 0, j = len - 1;
if (sum < a[0]) {
return -1;
}
while (i != j) {
if (a[i] + a[j] == sum) {
*x = a[i]; *y = a[j];
return 0;
}
else if (a[i] + a[j] > sum) {
j--;
}
else {
i++;
}
}
return -1;
}
//test
int main()
{
int a[] = {1,3,5,7,9,11,25,26,30,35,50};
int sum = 32, x = 0, y = 0;
for(sum = 0; sum < 86; sum++)
{
if (-1 != find(a, sizeof(a) / sizeof(a[0]), sum, &x, &y)) {
printf("find: sum=%d, (%d, %d)\n", sum, x, y);
}
else {
printf("not find\n");
}
}
return 0;
}
总结:
相信自己,你的答案就是正确的,面试需要自信。