首頁  >  文章  >  後端開發  >  php 怎麼求數組的連續數

php 怎麼求數組的連續數

PHPz
PHPz原創
2023-04-18 14:06:30504瀏覽

在PHP開發中,陣列是非常重要的資料結構之一。而其中,求取數組的連續數是一個非常常見的需求。本文將介紹不同的方法來實現這一操作。

  1. 循環遍歷法

循環遍歷法是求取陣列連續數的常見方法。其基本想法是:假設數組中的第一個元素為起點,從這個起點開始依序向後遍歷元素,每次計算下一個元素和當前元素之間的差值是否為1。如果是,則代表數組中存在連續數。如果不是,則重新設定起點並繼續遍歷。

範例程式碼如下:

function findConsecutiveNumbers($arr){
    $res = [];
    $n = count($arr);
    for($i=0;$i<$n;$i++){
        $j=$i+1;
        $tmp=[];
        $tmp[] = $arr[$i];
        while($j<$n && $arr[$j]-$arr[$j-1]==1){
            $tmp[] = $arr[$j];
            $j++;
        }
        if(count($tmp)>1){
            $res[] = $tmp;
        }
    }
    return $res;
}

$arr = [1, 2, 3, 5, 6, 7, 9];
$res = findConsecutiveNumbers($arr);
print_r($res); //输出[[1,2,3],[5,6,7]]
  1. 排序法

#排排序法是求取陣列連續數的另一種常見方法。其基本想法是:先對原始數組進行排序操作,然後依序遍歷數組元素,計算每個元素和前一個元素的差值是否為1。如果是,則代表數組中存在連續數。如果不是,則重新設定起點並繼續遍歷。

範例程式碼如下:

function findConsecutiveNumbers($arr){
    sort($arr);
    $res = [];
    $n = count($arr);
    $tmp = [];
    for($i=0;$i<$n;$i++){
        if(!$i || $arr[$i]-$arr[$i-1]==1){
            $tmp[] = $arr[$i];
        }else{
            if(count($tmp)>1){
                $res[] = $tmp;
            }
            $tmp = [$arr[$i]];
        }
    }
    if(count($tmp)>1){
        $res[] = $tmp;
    }
    return $res;
}

$arr = [1, 2, 3, 5, 6, 7, 9];
$res = findConsecutiveNumbers($arr);
print_r($res); //输出[[1,2,3],[5,6,7]]
  1. 遞歸法

#遞迴法也是求取陣列連續數的一種方法,透過遞歸遍歷每個元素,並判斷每個元素和前一個元素的差值是否為1。如果差值為1,則繼續遞歸下一個元素。如果差值不為1,則代表連續數結束,回傳上一層遞迴。

範例程式碼如下:

function findConsecutiveNumbers($arr) {
    $res = array();
    $n = count($arr);
    $i = 1;
    $j = 0;
    while($i < $n) {
        if($arr[$i] - $arr[$i-1] == 1) {
            $i++;
        } else {
            $tmp = array_slice($arr, $j, $i-$j);
            if(count($tmp)>1){
                $res[] = $tmp;
            }
            $j = $i;
            $i++;
        }
    }
    $tmp = array_slice($arr, $j, $i-$j);
    if(count($tmp)>1){
        $res[] = $tmp;
    }
    return $res;
}

$arr = [1, 2, 3, 5, 6, 7, 9];
$res = findConsecutiveNumbers($arr);
print_r($res); //输出[[1,2,3],[5,6,7]]

總結:

透過上述三種方法,我們可以輕鬆求取陣列的連續數。其中,循環遍歷法和排序法的時間複雜度為$O(nlogn)$,遞歸法的時間複雜度為$O(n)$。因此,在資料量較大的情況下,我們可以優先考慮使用遞歸法來實現。

以上是php 怎麼求數組的連續數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn