二分查找
題目描述
給定一個單調遞增的整數序列,問某個整數是否在序列中。
輸入
第一行爲一個整數n(n不超過10000),表示序列中整數的個數;
第二行爲n個整數;
第三行爲一個整數m(m不超過50000),表示查詢的個數;
接下來m行每行一個整數k。
輸出
每個查詢的輸出佔一行,如果k在序列中,輸出Yes,否則輸出No。
樣例輸入
5
1 3 4 7 11
3
3
6
9
樣例輸出
Yes
No
No
提示
代碼示例
import java.util.*;
public class Main {
private static Scanner scan;
public static void binarySearch(int[] a,int key) {
int left,right,middle,flag=0;
left=0;
right = a.length-1;
while(left<=right) {
middle = (left+right)/2;
if(a[middle]==key) {
flag=1;
break;
}else if(a[middle]<key) {
left = middle+1;
}else {
right = middle-1;
}
}
if(flag==1){
System.out.println("Yes");
}else {
System.out.println("No");
}
}
public static void main(String[] args) {
scan = new Scanner(System.in);
int n=scan.nextInt();
if(n>10000) {
System.exit(0);
}
int[] array = new int[n];
for(int index=0;index<array.length;index++) {
array[index] = scan.nextInt();
}
int m = scan.nextInt();
if(m>50000) {
System.exit(0);
}
int[] key = new int[m];
for(int index=0;index<key.length;index++) {
key[index] = scan.nextInt();
}
for(int i=0;i<m;i++) {
binarySearch(array, key[i]);
}
}
}