タイトル
与えられた2つの配列が、その交点を計算する関数を記述します。
例
入力:nums1 = [ 1、2、2、1 ]、nums2 = [ 2、2 ] 出力:[ 2、2 ] 入力:nums1 = [ 4。 、9。 、5。、nums2 = [] 9。 、4。 、9、8、4 ] 出力:[ 4、9 ]
トピックス要件:
各要素が現れるの出力周波数は、両方の配列に現れる要素の数と一致しなければなりません。
私たちは、出力の順序を考慮することはできません。
問題の解決策
タイトルは、2つの方法を提供し、ソート方法+両手法により、解決する一つの方法は、ハッシュマップが解決両者の使用です。メソッドの2つのオンラインリファレンス実装。具体的に以下の説明を参照してくださいするには:
方法であって、第1のソートされた配列は、次いで、二重ポインタに係る走査、アレイに復帰等しい数を追加します。思考のこのラインはすぐに元の配列はすでに良いシーケンスの状況と密接配列で解決することができます。
クラスソリューション{ 公共 のint []交差(INT [] nums1、INT [] nums2){ Arrays.sort(nums1)。 Arrays.sort(nums2)。 一覧 <整数> =一覧新しい新しいのArrayList <> (); int型私は、0 = ; int型 J = 0 ; // デュアルスキャンポインタ部分はすぐの交差点の問題に対処するためにソートすることができ ながら、(I <&& nums1.length J < nums2.length){ IF(nums1 [I] < nums2 [J]){ I ++ ; } それ以外の 場合(nums1 [I]> nums2 [J]){ J ++ ; } 他の{ list.add(nums1 [I])。 I ++ ; J ++ ; } } INT [] ARR = 新しい INT 〔はlist.size()]。 用(int型のk = 0; K <はlist.size(); ++ K){ ARR [K] = list.get(K)。 } 返すARR。 } }
方法2:作業続い表示されるようにキー値として配列内の値の数は、他のアレイの調停に連続軽量化を行い、発生符号の数は、参照を具現化
クラスソリューション{ 公共 のint []交差(INT [] nums1、INT [] nums2){ 地図 <整数、整数>マップ= 新しい新規のHashMap <> (nums1.length); //はマップにnums1及び周波数値を表示される ため(int型NUM:nums1){ Integer型のカウント = map.get(NUM); 場合(==カウントヌルを{) map.put(NUM、 1 )。 } 他の{ map.put(NUM、 ++ カウント)。 } } 一覧 <整数> =一覧新しい新しいのArrayList <> (); のため(int型NUM:nums2){ // 周波数マッピングで値が表示されます取得 =整数COUNTをmap.get(NUM)として、 IF(COUNT =!ヌル && COUNT! = 0 ){ list.add(NUM)。 // 各試合後注、値1(及び同じ周波数値一致nums2二nums1)を低減する必要の周波数 map.put(NUM、 - COUNT)。 } } INT [] RES = 新しい INT 〔はlist.size()]。 以下のために(INT ; I <はlist.size(); iが0 = I ++ ){ RES [I] = list.get(I)。 } リターンのres; } }