原文: http://blog.csdn.net/swgshj/article/details/7875482
问题描述:
一个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;
- }
总结:
相信自己,你的答案就是正确的,面试需要自信。