查找数组中大于或等于 N 的数字

2022-08-30 20:29:48

如果我有一个PHP数组:

$array

具有的值:

45,41,40,39,37,31

我有一个变量:

$number = 38;

如何返回该值?

39

因为这是数组中最接近 38(向上计数)的值?

问候

泰勒


答案 1
<?php
function closest($array, $number) {

    sort($array);
    foreach ($array as $a) {
        if ($a >= $number) return $a;
    }
    return end($array); // or return NULL;
}
?>

答案 2

下面是一个高级过程,用于获取所需的结果并处理任何数组数据:

  • 筛选保持在大于或等于目标的值上的数组,然后选择剩余的最低值。这是“最佳”值(如果所有值都较小,则可能是“无”) - 这是O(n)
  • 或者,先对数据进行排序并查看以下内容 - 这是(希望如此)O(n lg n)

现在,假设数组按升序排序,此方法将起作用:

  • 遍历数组并找到大于或等于目标的第一个元素 - 这是O(n)

如果数组是降序的(如帖子中所示),请按照上述操作,但要么:

  • 向后迭代 -- 这是O(n)
  • 首先按升序排序(参见fardjad的答案) - 这是(希望如此)O(n lg n)
  • 向前迭代,但保留一个后瞻值(如果跳过了确切的值,请记住“下一个最高”) - 这是O(n)

快乐编码。