> 백엔드 개발 > PHP 튜토리얼 > PHP에서 두 배열의 교차점을 찾는 세 가지 방법에 대한 자세한 설명

PHP에서 두 배열의 교차점을 찾는 세 가지 방법에 대한 자세한 설명

藏色散人
풀어 주다: 2023-04-08 12:08:01
앞으로
6437명이 탐색했습니다.

PHP에서 두 배열의 교차점을 찾는 세 가지 방법에 대한 자세한 설명

질문: 두 개의 배열이 주어지면 교집합을 계산하는 함수를 작성하세요.

예 1:

입력: nums1 = [1,2,2,1],nums2 = [2,2]

출력: [2]

예 2:

입력: nums1 = [4,9 ,5], nums2 = [9,4,9,8,4]

출력: [9,4]

설명:

출력 결과의 각 요소는 고유해야 합니다.

출력 결과의 순서를 고려할 필요는 없습니다.

해결책 1: 배열 반복

아이디어 분석:

배열을 반복하여 다른 배열이 있는지 확인

PHP 코드 구현:

/**
 * @param Integer[] $nums1
 * @param Integer[] $nums2
 * @return Integer[]
 */
function intersection($nums1, $nums2) {
    $res = [];
    for($i=0;$i<count($nums1);$i++){
        if(in_array($nums1[$i],$nums2)){
            $res[] = $nums1[$i];
        }
    }
    return array_unique($res);
}
로그인 후 복사

사용법:

$nums2 = [2,4,6,7,8,99];
$nums1 = [1,2,5,9,9,66,89,90,99,99];
var_dump(intersection($nums1, $nums2));
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

복잡성 분석:

시간 복잡도: O (mn)

해결책 2: 내장 배열 함수

아이디어 분석:

array_intersect() 함수를 사용하여 배열의 교차점을 가져온 다음 array_unique()를 사용하여 중복 항목을 제거하세요

PHP 코드 구현:

/**
 * @param Integer[] $nums1
 * @param Integer[] $nums2
 * @return Integer[]
 */
function intersection($nums1, $nums2) {
    return array_unique(array_intersect($nums1,$nums2));
}
로그인 후 복사

사용:

$nums2 = [2,4,6,7,8,99];
$nums1 = [1,2,5,9,9,66,89,90,99,99];
var_dump(intersection($nums1, $nums2));
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

해결 방법 3: 잔인한 해결

아이디어 분석:

먼저 두 배열을 하나의 배열로 병합한 다음 검색을 두 번 반복합니다.

PHP 코드 구현:

/**
 * @param Integer[] $nums1
 * @param Integer[] $nums2
 * @return Integer[]
 */
function intersection($nums1, $nums2) {
    $new_arr = array_merge(array_unique($nums1),array_unique($nums2));
    $res = [];
    for($i=0;$i<count($new_arr);$i++){
        for($j=$i+1;$j<count($new_arr);$j++){
            if($new_arr[$i] == $new_arr[$j]){
                $res[] = $new_arr[$i];
            }
        }
    }
    return array_unique($res);
}
로그인 후 복사

사용:

$nums2 = [2,4,6,7,8,99];
$nums1 = [1,2,5,9,9,66,89,90,99,99];
var_dump(intersection($nums1, $nums2));
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

복잡도 분석:

시간 복잡도: O(n^2)

해결책 4: 이중 포인터

아이디어 분석:

먼저 두 배열을 정렬하고 이중 포인터를 통해 검색하여 앞으로 나아갑니다

PHP 코드 구현:

/**
 * @param Integer[] $nums1
 * @param Integer[] $nums2
 * @return Integer[]
 */
function intersection($nums1, $nums2) {
    sort($nums1);
    sort($nums2);
    $i = $j = 0;
    $res = [];
    while($i < count($nums1) && $j < count($nums2)){
        if($nums1[$i] == $nums2[$j]){
            $res[] = $nums1[$i];
            $i++;
            $j++;
        }elseif($nums1[$i] < $nums2[$j]){
            $i++;
        }elseif($nums1[$i] > $nums2[$j]){
            $j++;
        }
    }
    return array_unique($res);
}
로그인 후 복사

용도:

$nums2 = [2,4,6,7,8,99];
$nums1 = [1,2,5,9,9,66,89,90,99,99];
var_dump(intersection($nums1, $nums2));
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

복잡도 분석:

시간 복잡도: O(nlogn)

더 많은 PHP 관련 지식을 보려면 php 튜토리얼을 방문하세요!

위 내용은 PHP에서 두 배열의 교차점을 찾는 세 가지 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿