第14题:
题目:输入一个已经按升序排序过的数组和一个数字,
在数组中查找两个数,使得它们的和正好是输入的那个数字。
要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。
C# codes as below:
using System;
namespace ConsoleApp
{
class RunClass
{
static void Main()
{
int[] array = { 1, 2, 3, 5, 6, 7, 9, 10, 12, 13 };
new Helper().Print(array,11);
Console.ReadLine();
}
}
class Helper
{
public void Print(int[] array, int number)
{
if (array.Length == 0 || array == null)
return;
int lowIndex = 0;
int highIndex = array.Length-1;
while (lowIndex < highIndex)
{
if (array[lowIndex] + array[highIndex] < number)
{
lowIndex++;
}
else if (array[lowIndex] + array[highIndex] > number)
{
highIndex--;
}
else
{
Console.WriteLine("{0} {1}", array[lowIndex], array[highIndex]);
lowIndex++;
highIndex--;
}
}
}
}
}