コーディングテスト練習記録

12785 ワード

2022.01.30 37日目
白駿2776号(暗記王)
質問する
蓮紙は記憶力が強い.だから私は一日に見たすべての精髄を覚えています.しかし、信じられない東圭は記憶力をテストすることにした.東圭は蓮鐘について行き、蓮鐘が一日見た整数を「マニュアル1」に書いた.これに基づいて、彼が真の暗記王かどうかを知るために、東圭は延宗にM個の質問をした.質問の内容は「今日Xという整数を見たことがありますか?」はい.延宗はすらすらと答え、東奎は延宗が見た数位を『マニュアル2』に記した.家に帰ってきたドンギュは、答えが正しいかどうかを確認しようとしたが、延宗についてきて疲れたので助けを求めた.東圭を助けるため、「マニュアル2」の順に数字ごとにプログラムを作成し、「マニュアル1」に1があれば、なければ0を出力します.
私の答え
  • 二分探索
  • を利用する
    最小値、最大値、中間値として
  • インデックスを使用する
  • .
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
            int T = Integer.parseInt(br.readLine());
    
            for (int i = 0; i < T; i++) {
                StringBuilder sb = new StringBuilder();
                int N = Integer.parseInt(br.readLine());
                int[] nArr = new int[N];
    
                StringTokenizer st = new StringTokenizer(br.readLine());
                for (int x = 0; x < N; x++) {
                    nArr[x] = Integer.parseInt(st.nextToken());
                }
                Arrays.sort(nArr);
    
                int M = Integer.parseInt(br.readLine());
    
                st = new StringTokenizer(br.readLine());
                for (int z = 0; z < M; z++) {
                    int value = Integer.parseInt(st.nextToken());
                    int min = 0;
                    int max = N - 1;
                    boolean answer = false;
    
                    while (min <= max) {
                        int mid = (min + max) / 2;
    
                        if (nArr[mid] < value) {
                            min = mid + 1;
                        } else if (nArr[mid] > value) {
                            max = mid - 1;
                        } else {
                            answer = true;
                            break;
                        }
                    }
                sb.append(answer ? 1 : 0).append("\n");
                }
                System.out.print(sb);
            }
        }
    }
    考える
  • 出力が多い場合はStringBuilder
  • を用いる.
  • BufferedReader, StringTokenizer
  • Set->は
  • を含む