<第3節-ダブルポインタ、スライドウィンドウ>2.公共の要素を求めます
1772 ワード
2.共通要素の取得
<説明>
A、Bの2つのセットが与えられた場合、2つのセットの共通要素が抽出され、昇順に出力されるプロセス
グラフに記入してください.
<入力>
第1行は、集合AのサイズN(1<=N<=30000)を与える.
2行目にはN個の要素があります.要素は重複しません.
3行目は、集合BのサイズM(1<=M<=30000)を与える.
4行目にはM要素があります.要素は重複しません.
各集合の要素の自然数は10000000を超えない.
<出力>
2つのセットの共通要素を昇順に並べて出力します.
===================================================
<コード>
並べ替え順は昇順ではないので、まず昇順で並べ替えます.共通要素を求めるので、2つの配列のうちの1つが終わります.同じ要素がある場合、arraylistに追加すると、2つの配列位置を指すp 1とp 2が増加します.そうでなければ、より小さな値を持つ配列の位置値が増加します.
1) Arrays.sort(配列名)配列は昇順に配列されている.
<説明>
A、Bの2つのセットが与えられた場合、2つのセットの共通要素が抽出され、昇順に出力されるプロセス
グラフに記入してください.
<入力>
第1行は、集合AのサイズN(1<=N<=30000)を与える.
2行目にはN個の要素があります.要素は重複しません.
3行目は、集合BのサイズM(1<=M<=30000)を与える.
4行目にはM要素があります.要素は重複しません.
各集合の要素の自然数は10000000を超えない.
<出力>
2つのセットの共通要素を昇順に並べて出力します.
===================================================
<コード>
並べ替え順は昇順ではないので、まず昇順で並べ替えます.共通要素を求めるので、2つの配列のうちの1つが終わります.同じ要素がある場合、arraylistに追加すると、2つの配列位置を指すp 1とp 2が増加します.そうでなければ、より小さな値を持つ配列の位置値が増加します.
import java.util.*;
class Main {
public ArrayList<Integer> solution(int num,int num2,int[] array1,int[] array2){
ArrayList<Integer> answer=new ArrayList<>();
int p1=0,p2=0;
Arrays.sort(array1);
Arrays.sort(array2);
while(p1<num&&p2<num2) {
if(array1[p1]==array2[p2]) {answer.add(array1[p1++]); p2++;}
else if(array1[p1]<array2[p2]) p1++;
else p2++; }
return answer;
}
public static void main(String[] args) {
Main main = new Main();
Scanner scan = new Scanner(System.in);
int num=scan.nextInt();
int[] array1=new int[num];
for(int i=0;i<num;i++) {
array1[i]=scan.nextInt();
}
int num2=scan.nextInt();
int[] array2=new int[num2];
for(int i=0;i<num2;i++) {
array2[i]=scan.nextInt();
}
for(int x: main.solution(num,num2,array1,array2)) {
System.out.print(x+" ");}
}
}
<重要>1) Arrays.sort(配列名)
Reference
この問題について(<第3節-ダブルポインタ、スライドウィンドウ>2.公共の要素を求めます), 我々は、より多くの情報をここで見つけました https://velog.io/@seunghee127/섹션3-Two-pointers-Sliding-window-2.-공통원소-구하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol