>  기사  >  백엔드 개발  >  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으로 문의하세요.