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

藏色散人
リリース: 2023-04-08 12:08:01
転載
6398 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート