Find the first missing number in a sequence of numbers

前端 未结 5 736
猫巷女王i
猫巷女王i 2021-01-28 13:57

It\'s the second day I try to find a solution for this problem.

I have an array.

$datas;

$datas[0]; // 8000
$datas[1]; // 8001
$datas[2]; // 8003
$datas         


        
相关标签:
5条回答
  • 2021-01-28 14:00

    With something like this, it's pretty simple to just iterate through the array with a foreach loop.

    foreach ($datas as $key=>$val) { 
      if ( $val +1 != $datas[$key+1] ) { 
        echo $val+1; // this is the first free value in the sequence
        }
      }
    
    0 讨论(0)
  • 2021-01-28 14:01
    <?php
    
    function get($data) {
        sort($data);
        $i = 0;
        while($i < count($data) - 2) {
            if ($data[$i+1] - $data[$i] != 1) return $data[$i] + 1;
            $i++;
        }
    
        return $data[count($data)-1] + 1;
    }
    
    echo get([ 8000, 8001, 8003, 8004,]);
    echo get([ 8000, 8001, 8002, 8003, 8004,]);
    
    0 讨论(0)
  • 2021-01-28 14:04

    You can use array_diff to find the missing value.
    I create a new array with values from min of $datas to max of $datas to compare against.
    The return is what is missing.

    $arr = range(min($datas),max($datas));
    
    Var_dump(min(array_diff($arr,$datas)));
    

    https://3v4l.org/ZmLAU

    Can be a one liner too:

    Var_dump(min(array_diff(range(min($datas),max($datas)), $datas)));
    
    0 讨论(0)
  • 2021-01-28 14:08

    something like this should work

    for($i=0;$i<count($datas);$i++){
      if($datas[$i] + 1 != $datas[$i+1]){
        echo($datas[$i] + 1 .' IS the missing number');
      }
    }
    
    0 讨论(0)
  • 2021-01-28 14:26

    Sort from lowest to highest (if not already sorted) and then increment from the lowest and check if it is in the array:

    sort($datas); 
    for($i=reset($datas); in_array($i, $datas); $i++);
    echo $i;
    

    reset gets the first number, in this case 8000 to start and the in_array condition terminates the loop when $i is not in the array.

    0 讨论(0)
提交回复
热议问题