二分查找练习
题目描述
输入数组长度 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/