질문: 두 개의 배열이 주어지면 교집합을 계산하는 함수를 작성하세요.
예 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!