Php 给定一个整数数组,什么';获取数组中n以内的其他整数数的最有效方法是什么?

Php 给定一个整数数组,什么';获取数组中n以内的其他整数数的最有效方法是什么?,php,arrays,sorting,array-map,array-filter,Php,Arrays,Sorting,Array Map,Array Filter,给定以下数组: $arr = array(0,0,1,2,2,5,6,7,7,9,10,10); 假设$n=2,获取每个值$n内数组中每个值的计数的最有效方法是什么 例如,6在$n中有3个其他值:5,7,7 最后,我想要一个对应的数组,其中只包含$n中的计数,如下所示: // 0,0,1,2,2,5,6,7,7,9,10,10 // $arr, so you can see it lined up $count_arr = array(4,4,4,4,4,3,3

给定以下数组:

$arr = array(0,0,1,2,2,5,6,7,7,9,10,10);
假设
$n=2
,获取每个值
$n
内数组中每个值的计数的最有效方法是什么

例如,
6
$n
中有3个其他值:5,7,7

最后,我想要一个对应的数组,其中只包含
$n
中的计数,如下所示:

                // 0,0,1,2,2,5,6,7,7,9,10,10 // $arr, so you can see it lined up
$count_arr = array(4,4,4,4,4,3,3,4,4,4, 2, 2);
一个简单的foreach循环是正确的选择吗


我的最后一个答案是在没有充分探究问题的情况下写的

在处理阵列之前,尝试对其进行排序,并在运行阵列时加以利用。这具有更好的运行时复杂性

$arr = array(0,0,1,2,2,5,6,7,7,9,10,10);
asort($arr);
$n = 2;
$cnt = count($arr);
$counts = array_pad(array(), $cnt, 0);
for ($x=0; $x<$cnt; $x++) {
    $low = $x - 1;
    $lower_range_bound = $arr[$x]-$n;
    while($low >= 0 && ($arr[$low] >= $lower_range_bound)) {
        $counts[$x]++;
        $low--;
    }
    $high = $x + 1;
    $upper_range_bound = $arr[$x]+$n;
    while($high < $cnt && $arr[$high] <= $upper_range_bound) {
        $counts[$x]++;
        $high++;
    }
}
print_r($arr);
print_r($counts);
$arr=数组(0,0,1,2,2,5,6,7,7,9,10,10);
asort($arr);
$n=2;
$cnt=计数($arr);
$counts=array_pad(array(),$cnt,0);
对于($x=0;$x=0&&($arr[$low]>=$lower\u range\u bound)){
$counts[$x]++;
美元低--;
}
$high=$x+1;
$upper_range_bound=$arr[$x]+$n;

虽然($high<$cnt&&$arr[$high]我的最后一个答案是在没有完全探究问题的情况下写的

在处理数组之前,尝试对其进行排序,并在运行时利用它。这具有更好的运行时复杂性

$arr = array(0,0,1,2,2,5,6,7,7,9,10,10);
asort($arr);
$n = 2;
$cnt = count($arr);
$counts = array_pad(array(), $cnt, 0);
for ($x=0; $x<$cnt; $x++) {
    $low = $x - 1;
    $lower_range_bound = $arr[$x]-$n;
    while($low >= 0 && ($arr[$low] >= $lower_range_bound)) {
        $counts[$x]++;
        $low--;
    }
    $high = $x + 1;
    $upper_range_bound = $arr[$x]+$n;
    while($high < $cnt && $arr[$high] <= $upper_range_bound) {
        $counts[$x]++;
        $high++;
    }
}
print_r($arr);
print_r($counts);
$arr=数组(0,0,1,2,2,5,6,7,7,9,10,10);
asort($arr);
$n=2;
$cnt=计数($arr);
$counts=array_pad(array(),$cnt,0);
对于($x=0;$x=0&&($arr[$low]>=$lower\u range\u bound)){
$counts[$x]++;
美元低--;
}
$high=$x+1;
$upper_range_bound=$arr[$x]+$n;

虽然($high<$cnt&&$arr[$high]看起来数组已排序。这总是正确的吗?不一定。但我总是可以事先排序使其如此。看起来数组已排序。这总是正确的吗?不一定。但我总是可以事先排序使其如此。