ホームページ >バックエンド開発 >PHPチュートリアル >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 サイトの他の関連記事を参照してください。