一个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; }
相信自己,你的答案就是正确的,面试需要自信。