题目:输入一个已经按升序排序过的数组和一个数字N,在数组中查找两个数(只需要找出一对),使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
分析:再建立一个数组,其成员为N减去原数组的值。最后只要比较两个数组中相同的值即可。部分代码如下:
for (i = 0; i < NUM; i++) { copy[i] = N - array[i]; } i = j = 0; while (i <= NUM-1 && j <= NUM-1) { if (array[i] == copy[j]) break; else if (array[i] < copy[j]) i++; else j++; } i = j = 0; if (i <= NUM-1 || j <= NUM-1) { printf("%d = %d + %d", N, array[i], N-array[i]); return 0; } else { printf("find noting!\n"); return 0; }