Heim > Artikel > Backend-Entwicklung > Detaillierte Erläuterung von drei Methoden zum Ermitteln der Schnittmenge zweier Arrays in PHP
Frage: Schreiben Sie bei gegebenen zwei Arrays eine Funktion, um deren Schnittmenge zu berechnen.
Beispiel 1:
Eingabe: nums1 = [1,2,2,1],nums2 = [2,2]
Ausgabe: [2]
Beispiel 2:
Eingabe: Nums1 = [4,9,5], Nums2 = [9,4,9,8,4]
Ausgabe: [9,4]
Hinweis:
Jedes Element im Ausgabeergebnis muss eindeutig sein.
Wir können die Reihenfolge der Ausgabeergebnisse ignorieren.
Lösung 1: Ein Array iterieren
Ideenanalyse:
Ein Array iterieren und feststellen, ob es ein anderes Array gibt
PHP Code-Implementierung:
/** * @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); }
Verwendung:
$nums2 = [2,4,6,7,8,99]; $nums1 = [1,2,5,9,9,66,89,90,99,99]; var_dump(intersection($nums1, $nums2));
Komplexitätsanalyse:
Zeitkomplexität: O(mn)
Lösung 2: Integriert Array-Funktion
Ideenanalyse:
Verwenden Sie die Funktion array_intersect(), um die Schnittmenge von Arrays zu ermitteln, und verwenden Sie dann array_unique(), um Duplikate zu entfernen
PHP-Code-Implementierung :
/** * @param Integer[] $nums1 * @param Integer[] $nums2 * @return Integer[] */ function intersection($nums1, $nums2) { return array_unique(array_intersect($nums1,$nums2)); }
Verwendung:
$nums2 = [2,4,6,7,8,99]; $nums1 = [1,2,5,9,9,66,89,90,99,99]; var_dump(intersection($nums1, $nums2));
Lösung 3: Brutale Lösung
Ideenanalyse:
Fügen Sie zunächst die beiden Arrays zu einem zusammen Array, dann zweimal durchlaufen, um
PHP-Code-Implementierung zu finden:
/** * @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); }
Verwendung:
$nums2 = [2,4,6,7,8,99]; $nums1 = [1,2,5,9,9,66,89,90,99,99]; var_dump(intersection($nums1, $nums2));
Komplexitätsanalyse:
Zeitkomplexität: O(n ^ 2)
Lösung 4: Doppelzeiger
Ideenanalyse:
Sortieren Sie zuerst die beiden Arrays und blättern Sie durch die Doppelzeiger, um
PHP-Code zu suchen Implementierung:
/** * @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); }
Verwendung:
$nums2 = [2,4,6,7,8,99]; $nums1 = [1,2,5,9,9,66,89,90,99,99]; var_dump(intersection($nums1, $nums2));
Komplexitätsanalyse:
Zeitkomplexität: O(nlogn)
Weitere PHP-bezogene Kenntnisse finden Sie unter PHP-Tutorial!
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von drei Methoden zum Ermitteln der Schnittmenge zweier Arrays in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!