>  기사  >  백엔드 개발  >  PHP의 일련의 숫자에서 연속되지 않은 숫자를 찾는 방법

PHP의 일련의 숫자에서 연속되지 않은 숫자를 찾는 방법

PHPz
PHPz원래의
2023-04-05 10:31:22741검색

PHP 개발에서는 일련의 숫자에서 불연속적인 숫자를 찾아야 하는 경우가 많습니다. 이 요구 사항을 빠르고 효율적으로 실현하는 방법은 무엇입니까? 이 기사에서는 이에 대해 자세히 설명합니다.

1. 문제 배경

일련의 숫자에서 불연속적인 숫자를 찾아보세요. 즉, 특정 숫자 다음 숫자에서 일정한 간격을 두고 있는 숫자를 찾아보세요. 예를 들어 시퀀스 [1, 2, 6, 7, 9, 12, 15, 17]이 있고 불연속적인 숫자를 찾으라고 요청하면 간격이 4라고 가정하면 반환 값은 [2, 9, 17]입니다.

2. 문제 분석

이 요구 사항을 달성하려면 전체 숫자 시퀀스를 순회하고 각 숫자에 대해 다음 처리를 수행해야 합니다.

  1. 현재 숫자와 이전 숫자의 차이가 지정된 것과 같은지 확인하세요. 간격이 같으면 이 숫자가 불연속 숫자 중 하나임을 나타내고, 같지 않으면 숫자가 현재 숫자로 기록됩니다.
  2. 기록된 숫자를 결과 배열에 추가하고 마지막으로 결과 배열을 반환합니다.

특정 구현에서는 다음 방법을 사용할 수 있습니다.

  1. 불연속 숫자를 저장하기 위해 $result 배열을 정의합니다.
  2. 이전 숫자를 기록하려면 $previous 변수를 정의하세요.
  3. 숫자의 순서를 탐색하고 각 숫자를 처리합니다.

    1. 이 숫자와 이전 숫자의 차이가 지정된 간격과 같으면 해당 숫자를 $result 배열에 추가합니다.
    2. 그렇지 않으면 숫자를 $previous로 기록합니다.
  4. $result 배열을 반환합니다.

구체적인 구현 코드는 다음과 같습니다.

function findDiscontinuousNumbers($nums, $interval) {
    $result = [];
    $previous = null;
    foreach ($nums as $num) {
        if (!is_null($previous) && $num - $previous == $interval) {
            $result[] = $num;
        }
        $previous = $num;
    }
    return $result;
}

$nums = [1, 2, 6, 7, 9, 12, 15, 17];
$interval = 4;
$result = findDiscontinuousNumbers($nums, $interval);
print_r($result);

3. 코드 최적화

위 구현은 이미 요구 사항을 충족할 수 있지만 실제 사용에서는 효율적이지 않을 수 있습니다. 다음 최적화를 고려하십시오.

  1. 숫자가 불연속 숫자로 기록되면 다음 숫자는 연속될 수 없으므로 다음 처리 전에 $previous를 이 불연속 숫자로 설정할 수 있습니다.
  2. 차이가 큰 디지털 시퀀스를 검색하는 경우 순회 과정에서 마지막 불연속 번호의 위치를 ​​기록하고 이 위치에서 바로 다음 검색을 처리할 수 있어 불필요한 순회를 줄일 수 있습니다.

최적화된 코드는 다음과 같습니다.

function findDiscontinuousNumbers($nums, $interval) {
    $result = [];
    $previous = null;
    $last_discontinuous_index = null; // 上一次不连续数字的索引位置
    for ($i = 0; $i < count($nums); ) {
        if (!is_null($previous)) {
            if ($nums[$i] - $previous == $interval) {
                $result[] = $nums[$i];
            } else {
                $previous = $nums[$i];
                $last_discontinuous_index = $i;
            }
        } else {
            $previous = $nums[$i];
            $last_discontinuous_index = $i;
        }
        $i += ($i == $last_discontinuous_index + 1) ? 1 : $interval;
    }
    return $result;
}

$nums = [1, 2, 6, 7, 9, 12, 15, 17];
$interval = 4;
$result = findDiscontinuousNumbers($nums, $interval);
print_r($result);

IV. 요약

이 기사에서는 PHP에서 불연속 숫자를 찾는 방법을 간략하게 소개하고 기본 구현을 제공합니다. 실제 사용에서는 더 나은 성능과 효과를 달성하기 위해 다양한 요구에 따라 적절한 구현 방법과 최적화 조치를 선택해야 합니다.

위 내용은 PHP의 일련의 숫자에서 연속되지 않은 숫자를 찾는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.