快速寻找满足条件的两个数

题目:

      能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的数字。

解法一:
 穷举法,从数组中任意取出两个数字。计算两者之和是否为给定的数字。其时间复杂度为N(N-1)/2,即O(N2).

解法二:
快速寻找满足条件的两个数_第1张图片

解法三:
       直接对两个数字的和进行一个有序的遍历,从而降低算法的时间复杂度。
       首先对数组进行排序,时间复杂度为O(Nlog2N)
快速寻找满足条件的两个数_第2张图片
伪代码如下:
for(i=0;j=n-1;i
{
    if(arr[i]+arr[j]==Sum)
         return (i,j);
    else if(arr[i]+arr[j]
           i++;
    else 
         j--;
}

return (-1,-1)

它的时间复杂度为O(N).


你可能感兴趣的:(编程之美)