题目:两数之和:给定一个不重复整数数组,找出其中两个数相加等于目标值?
看到这个题,第一想法一般是:循环穷举,列出所有可能。但如果有人问你这个问题,肯定就不会这么简单了。应该会有更有效的算法。
我写了几个方法,经过效率对比,最后留下一个效率最快的。思路如下:
1,先将数组排序。
2,遍历数组,将小于目标值一半的值 放入一个临时数组。
3,遍历后半部分的时候,再从临时数组查找 是否有对应的值。
提示:isset() 效率 要比 in_array() 高,如果用 array_flip(),则会增加消耗。
如果谁有更优的算法,麻烦告诉我一下(qq:76723287),谢谢;
/**
* 给定一个整数数组,找出其中两个数相加等于目标值
* @param type $arr
* @param type $sum
* @return type
*/
function arrsum($arr, $sum) {
$return = [];
$agv = $sum / 2;
sort($arr);
$tmp = [];
foreach ($arr as $value) {
if ($value < $agv) {
$tmp[$sum - $value] = $value;
} else {
if ($value >= $sum) {
break;
}
if (isset($tmp[$value])) {
$return[] = [$tmp[$value], $value];
}
}
}
return $return;
}
发表评论 取消回复