二分查找练习

题目描述

输入数组长度 n 输入数组      a[1...n] 输入查找个数m 输入查找数字b[1...m]   输出 YES or NO  查找有则YES 否则NO 。 
输入描述:
输入有多组数据。
每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。


输出描述:
如果在n个数组中输出YES否则输出NO。

输入例子:
5
1 5 2 4 3
3
2 5 6

输出例子:
YES
YES
NO

代码:
import java.util.Arrays;
import java.util.Scanner;

public class 查找 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int count = in.nextInt();
            int[] num = new int[count];
            for (int i = 0; i < count; i++) {
                num[i] = in.nextInt();
            }
            Arrays.sort(num);
            int n = in.nextInt();
            for (int a = 0; a < n; a++) {
                int flag = in.nextInt();
                if(search(num,flag))
                    System.out.println("YES");
                else
                    System.out.println("NO");

            }
        }

    }

    /**
     * 二分查找
     */
    public static boolean search(int[] num, int flag) {
        int low = 0, high = num.length - 1;
        while (low <= high) {
            int middle = (low + high) >> 1; // 相当于(low+high)/2
            if (flag == num[middle])
                return true;
            else if (flag < num[middle])
                high = middle - 1;
            else
                low = middle + 1;
        }
        return false;

    }

}


原文地址:https://www.cnblogs.com/ygh1229/p/5710485.html