Chinaunix首页 | 论坛 | 博客
  • 博客访问: 406650
  • 博文数量: 101
  • 博客积分: 2207
  • 博客等级: 大尉
  • 技术积分: 2508
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 20:45
文章分类

全部博文(101)

文章存档

2013年(15)

2012年(86)

我的朋友

分类: C/C++

2012-09-25 11:15:38

在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <cstdio>

  3. int binary_search(int *a, int low, int high,int x)
  4. {
  5.     int mid;

  6.     while (low <= high)
  7.     {
  8.         mid = low + (high - low)/2;
  9.         if (a[mid] == x) return mid;
  10.         else if (a[mid] < x) low = mid + 1;
  11.         else high = mid -1;
  12.     }
  13.     return -1;
  14. }
  15. void sum(int *a,int len,int sum)
  16. {
  17.    for (int i = 0; i < len; ++i)
  18.    {
  19.     if (binary_search(a,0,len-1,sum-a[i]) != -1)
  20.     {
  21.         printf("%d %d\n",a[i],sum-a[i]);
  22.         return;
  23.     }
  24.    }
  25. }

  26. int main()
  27. {
  28.     int a[] = {1,2,4,7,11,15};
  29.     sum(a,sizeof(a)/sizeof(a[0]),15);
  30. }

阅读(1519) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~