高分求算法,从一组无序整数数组中找出和为某整数的最佳算法,该怎么解决
高分求算法,从一组无序整数数组中找出和为某整数的最佳算法
一组无序数组,包括负数,要求找出一对和为48的整数。
要求复杂度必须小于 O(N^2)
------解决方案--------------------
用48减去数组中所有的数,得到新的数组,这样问题就转化为:从两个数组中找相同的元素的问题。按照这个思路,可以采取下面的步骤:
1、看看数组中有没有两个24;
2、将数组排序得到有序数组a1(由小到大);
3、48-a1得到数组,经过逆序后得到数组a2;
4、比较a1和a2中的(第一个)数;if 相等 then 得到结果;
5、将4比较中较小的数的指针后移一个;if 到数组尾部 then 没有结果 else goto 4;
------解决方案--------------------
先将序列排序,得到新序列NEW[]。
再头到尾扫描一遍新序列。
对当前扫描点NEW[i],检查序列中是否元素与NEW[i]的和为48。这个检查过程可以这样:对NEW[i]后的元素实施二分查找,若存在值为48-NEW[i]的元素,那么,就找到了一组解了。
复杂度:排序耗时O(nlog(n)),查找耗时O(nlog(n))。因而总的复杂度是O(nlog(n))。
一组无序数组,包括负数,要求找出一对和为48的整数。
要求复杂度必须小于 O(N^2)
------解决方案--------------------
用48减去数组中所有的数,得到新的数组,这样问题就转化为:从两个数组中找相同的元素的问题。按照这个思路,可以采取下面的步骤:
1、看看数组中有没有两个24;
2、将数组排序得到有序数组a1(由小到大);
3、48-a1得到数组,经过逆序后得到数组a2;
4、比较a1和a2中的(第一个)数;if 相等 then 得到结果;
5、将4比较中较小的数的指针后移一个;if 到数组尾部 then 没有结果 else goto 4;
------解决方案--------------------
先将序列排序,得到新序列NEW[]。
再头到尾扫描一遍新序列。
对当前扫描点NEW[i],检查序列中是否元素与NEW[i]的和为48。这个检查过程可以这样:对NEW[i]后的元素实施二分查找,若存在值为48-NEW[i]的元素,那么,就找到了一组解了。
复杂度:排序耗时O(nlog(n)),查找耗时O(nlog(n))。因而总的复杂度是O(nlog(n))。