ホームページ  >  記事  >  バックエンド開発  >  PHPで2つの配列の積部分を求める3つの方法を詳しく解説

PHPで2つの配列の積部分を求める3つの方法を詳しく解説

藏色散人
藏色散人転載
2020-02-01 17:38:246397ブラウズ

PHPで2つの配列の積部分を求める3つの方法を詳しく解説

質問: 2 つの配列が与えられ、それらの交差を計算する関数を作成します。

例 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: 暴力的な解決策

アイデア分析:

最初に 2 つの配列を 1 つにマージします。 array を 2 回ループして、

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: ダブル ポインター

アイデア分析:

最初に 2 つの配列を並べ替え、ダブル ポインターを進めて検索します

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で2つの配列の積部分を求める3つの方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。