九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找

2014-11-24 09:08:33 · 作者: · 浏览: 0

题目地址:http://ac.jobdu.com/problem.php pid=1349

题目描述: 统计一个数字在排序数组中出现的次数。 输入:

每个测试案例包括两行:

第一行有1个整数n,表示数组的大小。1<=n <= 10^6。

第二行有n个整数,表示数组元素,每个元素均为int。

第三行有1个整数m,表示接下来有m次查询。1<=m<=10^3。

下面有m行,每行有一个整数k,表示要查询的数。

输出: 对应每个测试案例,有m行输出,每行1整数,表示数组中该数字出现的次数。

样例输入:
81 2 3 3 3 3 4 513
样例输出:
4



#include 
  
   
 
typedef struct timesofdata{
    int data;
    int times;
}TimesOfData;
 
int Bsearch (TimesOfData hash[], int start, int end, int k){
    int mid;
 
    while (start <= end){
        mid = (start + end) / 2;
        if (hash[mid].data < k)
            start = mid + 1;
        else if (hash[mid].data > k)
            end = mid - 1;
        else
            return hash[mid].times;
    }
    return 0;
}
 
int main(void){
    int n;
    int input;
    TimesOfData hash[1000000];
    int m;
    int k;
    int i;
    int j;
    int pre;
    int flag;
 
    while (scanf ("%d", &n) != EOF){
        for (i=0, j=-1; i
   
    

#include 
     
      
 
int Bsearch (int data[], int start, int end, int k){
    int mid;
 
    while (start <= end){
        mid = (start + end) / 2;
        if (data[mid] < k)
            start = mid + 1;
        else if (data[mid] > k)
            end = mid - 1;
        else
            return mid;
    }
    return -1;
}
 
int main(void){
    int n;
    int input[1000000];
    int m;
    int k;
    int i;
    int index;
    int num;
 
    while (scanf ("%d", &n) != EOF){
        for (i=0; i
      
       = 0 && input[i--] == k) ++num; i = index + 1; while (i < n && input[i++] == k) ++num; printf ("%d\n", num); } } } return 0; }
      
     

本以为主要考的是哈希表才有了第一个程序,谁知却是考的二分查找,呵呵……