题目:
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字。
解法一:
穷举法,从数组中任意取出两个数字。计算两者之和是否为给定的数字。其时间复杂度为N(N-1)/2,即O(N2).
解法二:
解法三:
直接对两个数字的和进行一个有序的遍历,从而降低算法的时间复杂度。
首先对数组进行排序,时间复杂度为O(Nlog2N)
伪代码如下:
for(i=0;j=n-1;i<j)
{
if(arr[i]+arr[j]==Sum)
return (i,j);
else if(arr[i]+arr[j]<Sum)
i++;
else
j--;
}
return (-1,-1)
它的时间复杂度为O(N).
快速寻找满足条件的两个数
原文:http://blog.csdn.net/wangfengfan1/article/details/45201719