Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von drei Methoden zum Ermitteln der Schnittmenge zweier Arrays in PHP

Detaillierte Erläuterung von drei Methoden zum Ermitteln der Schnittmenge zweier Arrays in PHP

藏色散人
藏色散人nach vorne
2020-02-01 17:38:246398Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen