查找数组中两个数,它们的和与数组中某个数字相等
2011-08-27 22:52 DylanChan 阅读(185) 评论(0) 编辑 收藏 举报怀念对算法的酷爱,决定搜集网上的算法题目,并持之以恒练习之
/* 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。 如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1,5,4,7,18,25,37,44 和数字25。由于7+18=25,因此输出7 和18。 */ class Program { static void Main(string[] args) { int x, y; int[] items = { 1,5,4,7,18,25,37,44 }; FindTwoNumbers(items, 25, out x, out y); Console.WriteLine("第一个数字是:{0}", x); Console.WriteLine("第二个数字是:{0}", y); /* * * 输出结果 * * * 第一个数字是:7 第二个数字是:18 * */ } static void FindTwoNumbers(int[] items,int sum, out int x, out int y) { x = -1; y = -1; int start = 0; int end = items.Length - 1; //利用while循环,控制时间复杂度为0(n) while (end > start) { int sortSum = items[start] + items[end]; if (sum == sortSum) { x = items[start]; y = items[end]; break; } else if (sum > sortSum) { start++; } else { end--; } } } }