您的位置:首页 > 其它

算法题一

2015-10-26 23:52 232 查看
有一个已经排序的数组(升序),数组中可能有正数、负数或0,求数组中元素的绝对值最小的数,要求,不能用顺序比较的方法(复杂度需要小于O(n)),可以使用任何语言实现

<?php

$arr1 = [4,6,9,11,12,15];
$arr2 = [-20,-18,-10,-9,-4];
$arr3 = [-10,-5,1,3,9];

//结果1:  4,  结果2:  -4,  结果3:  1
echo sprintf('结果1:  %s,  结果2:  %s,  结果3:  %s',
get_min($arr1),
get_min($arr2),
get_min($arr3));

function get_min($arr) {
//分为3中情况,全是正数,全是负数,正负数都有
//大于或等于0的话,最新就是第一个
if ($arr[0] >= 0) {
return $arr[0];
}

//全是负数,则绝对值最小是最后一个数字
if (($end = end($arr)) <= 0) {
return $end;
}

$k = 0;
foreach($arr as $key => $val) {
if ($val >= 0 ) {
$k = $key;
break;
}
}
//下标是k 和 下标是k-1  做比较
if ($arr[$k] >= abs($arr[$k - 1])) {
return $arr[$k - 1];
}
return $arr[$k];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: