算法题一

来源:互联网 发布:人机界面编程 编辑:程序博客网 时间:2024/05/16 14:56

有一个已经排序的数组(升序),数组中可能有正数、负数或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:  1echo 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];}
0 0
原创粉丝点击