题目:输入一个已经按升序排序过得数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求:时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
举例:输入数组1、2、4、7、11、15和数字15.由于4 + 11 = 15,因此输出4和11。、
答:
#include "stdafx.h" #include <iostream> using namespace std; void FindNumber(int arr[], int length, int num) { if (NULL == arr || length <= 0) { return; } int begin = 0; int end = length - 1; while (begin <= end) { if (arr[begin] + arr[end] == num) { cout<<num<<" = "<<arr[begin]<<" + "<<arr[end]<<endl; break; } else if (arr[begin] + arr[end] > num) { end--; } else { begin++; } } } int _tmain(int argc, _TCHAR* argv[]) { int arr[] = {1, 2, 4, 7, 11, 15}; FindNumber(arr, sizeof(arr)/sizeof(arr[0]), 15); return 0; }
运行界面如下: