首页 > 试题广场 >

给定一个已排序的数组和一个指定值,返回指定值在数组中的下标位

[问答题]

给定一个已排序的数组和一个指定值,返回指定值在数组中的下标位置,如果不存在,返回把给定值插入到数组之后的下标位置

/**
 * 分析:两种情况:
 * 首先,判断数组是顺序还是倒序
 * 1. 不在数组中
 *  1.1. 大于最大值
 *  1.2. 小于最大值
 *  1.3. 介于两者之间
 * 2. 在数组中,返回下标
 */

function getKeyFromArray($array, $select)
{
    // 非数组和空数组过滤
    if (!is_array($array) || count($array) < 1) {
        return -1;
    }

    // 判断数组是顺序还是倒序
    $length = count($array);
    $order = $array[$length - 1] >= $array[0] ? 'asc' : 'desc';

    $key = array_search($select, $array);
    // 找不到返回false
    if (false === $key) {
        $max = max($array);
        $min = min($array);
        if ($select > $max) {
            return $order == 'asc' ? $length : 0;
        } elseif ($select < $min) {
            return $order == 'asc' ? 0 : $length;
        } else {
            foreach ($array as $key => $val) {
                if ($select > $val) {
                    return $order == 'asc' ? $key + 1 : $key;
                }
            }
        }
    } else {
        return $key;
    }

    return -1;
}

发表于 2021-02-25 11:20:59 回复(1)