编程之美2.12—快速寻找满足条件的两个数

题目:

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


解法一:

穷举:O(N^2)


解法二:

先排序,再二分查找M-a[i],

排序O(NlogN),每个数二分查找O(NlgoN)

总的时间复杂度O(NlogN)


解法三:

hash表,给定一个数字,根据hash映射查找另一个数字是否在数组中,O(1).

总的时间复杂度O(N),额外增加O(N)的hash表存储空间。


解法四:

先排序,再直接对两数之和二分查找

排序O(NlogN),查找O(N).

总的时间复杂度是O(NlogN)

for(i=0,j=n-1;i<j;)
{
    if(a[i]+a[j]==M)
       return i,j;
    else if(a[i]+a[j]<M)
       i++;
    else 
       j--;
}

    原文作者:小地盘
    原文地址: https://blog.csdn.net/wtyvhreal/article/details/45317989
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞