Problem Description
在一个给定的无重复元素的递增序列里,查找与给定关键字相同的元素,若存在则输出找到的位置,不存在输出-1。
Input
一组输入数据,输入数据第一行首先输入两个正整数n ( n < = 10^6 )和m ( m < = 10^4 ),n是数组中数据元素个数,随后连续输入n个正整数,输入的数据保证数列递增。
随后m行输入m个待查找的关键字key
Output
若在给定的序列中能够找到与关键字key相等的元素,则输出位序(序号从0开始),否则输出-1。
Example Input
8 3 4 6 8 9 13 20 21 22 6 8 17
Example Output
1 2-1
#include<stdio.h> #include<string.h> int Locat(int a[], int key, int l, int r); int main() { int a[1000010], key, i, m, n; scanf("%d%d", &n, &m); for(i = 0; i < n; i++) scanf("%d", &a[i]); while(m--) { scanf("%d", &key); i = Locat(a, key, 0, n - 1); printf("%d\n", i); } return 0; } int Locat(int a[], int key, int l, int r) { int m; if(l <= r) { m = (l + r)/2; if(key == a[m]) return m; else { if(key < a[m]) return Locat(a, key, l, m - 1); else return Locat(a, key, m + 1, r); } } return -1; }