[Microsoft面试]题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。
如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15 和数字15。由于4+11=15,因此输出4 和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]