在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
- #include <iostream>
- #include <cstdio>
- int binary_search(int *a, int low, int high,int x)
- {
- int mid;
- while (low <= high)
- {
- mid = low + (high - low)/2;
- if (a[mid] == x) return mid;
- else if (a[mid] < x) low = mid + 1;
- else high = mid -1;
- }
- return -1;
- }
- void sum(int *a,int len,int sum)
- {
- for (int i = 0; i < len; ++i)
- {
- if (binary_search(a,0,len-1,sum-a[i]) != -1)
- {
- printf("%d %d\n",a[i],sum-a[i]);
- return;
- }
- }
- }
- int main()
- {
- int a[] = {1,2,4,7,11,15};
- sum(a,sizeof(a)/sizeof(a[0]),15);
- }
阅读(1519) | 评论(0) | 转发(1) |