陈荣莲 发表于 2013-8-16 10:52:12

[Microsoft面试]题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。

如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和11。

秦静静 发表于 2013-8-16 11:10:11

Use twocursors. One at front and the other at the end. Keep track of the sum by movingthe cursors.void find2Number(int a[], int n, int dest) {int *f = a, *e=a+n-1;int sum = *f + *e;while (sum != dest && f < e) {    if (sum < dest) sum =*(++f);    else sum = *(--e);}if (sum == dest) printf(“%d, %d\n”, *f,*e);}
页: [1]
查看完整版本: [Microsoft面试]题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。