题目:
能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值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--;
}