ここでのオリジナルタイトルリンク:https://leetcode.com/problems/intersection-of-three-sorted-arrays/
トピック:
3つの整数の配列を考えると arr1
、 arr2
そして arr3
厳密に増加順にソート、すべての3つの配列に登場整数のみのソートされた配列を返します。
例1:
入力:ARR1 = [1,2,3,4,5]、ARR2 = [1,2,5,7,9]、ARR3 = [1,3,4,5,8] 出力:[1,5] 解説:のみ1と5は、3つの配列に登場しました。
制約:
1 <= arr1.length, arr2.length, arr3.length <= 1000
1 <= arr1[i], arr2[i], arr3[i] <= 2000
ソリューション:
3つのポインタが3つの配列を指しています。
3つの尖った値が同じである場合は、解像度にそれを追加し、すべての3つのポインターを移動します。
そうでなければ最初の値<第二の値は、第一ポインタを移動する場合。
他の場合に第二の値<第3の値、今最初の値でなければならない> =第二値、2番目のポインタを移動する必要があります。
他noew最初の値> =第二値と第2値> =第3の値から、第3ポインタを移動させます。
時間計算:O(n)を。N =配列の長さの合計。
スペース:O(1)。
ACのJava:
1 クラスソリューション{ 2 公共一覧<整数> arraysIntersection(INT [] ARR1、INT [] ARR2、INT [] ARR3){ 3 一覧<整数> RES = 新規のArrayList <> (); 4 もし(ARR1 == NULL || ARR2 == NULL || ARR3 == NULL ){ 5つの リターンRES。 6 } 7 8 INTが I 0 = 。 9 int型 J = 0 ; 10 int型 K = 0 。 11 一方、(I <J <arr2.length && K <&& arr1.length {arr3.length) 12 であれば(ARR1 [I] == ARR2 [J] && ARR1 [I] == ARR3 [K]){ 13の RES。 (ARR1 [I])を加えます。 14 I ++ ; 15 J ++ ; 16 K ++ 。 17 } そう であれば(ARR1 [I] < ARR2 [J]){ 18 I ++ 。 19 } そう であれば(ARR2 [J] < ARR3 [K]){ 20 J ++ 。 21 } 他{ 22 K ++ 。 23 } 24 } 25の 26 戻りRES。 27 } 28 }
类似2つの配列の交差点。