[九度oj]题目1349:数字在排序数组中出现的次数

来源:互联网 发布:mac eclipse svn 编辑:程序博客网 时间:2024/04/26 23:34
题目描述:
统计一个数字在排序数组中出现的次数。
输入:

每个测试案例包括两行:

第一行有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 <iostream>#include <cstdio>#include <cstdlib>using namespace std; int FindFirstKey(int array[],int len,int key,int low,int high){   if(low > high)      return -1;        int middle = (low + high)/2;   int middlevalue = array[middle];    if(middlevalue == key)   {        if((middle > 0 && middlevalue != array[middle - 1]) || (middle == 0))        return middle;     else       high = middle - 1;   }      else if(middlevalue > key)     high = middle - 1;   else     low = middle + 1;    return FindFirstKey(array,len,key,low,high);} int FindLastKey(int array[],int len,int key,int low,int high){  if(low > high)    return -1;      int middle = (low + high)/2;  int middlevalue = array[middle];      if(middlevalue == key)  {    if((middle < len -1 && middlevalue != array[middle + 1]) || (middle == len -1))       return middle;    else       low = low + 1;}  else if(middlevalue > key)    high = middle - 1;  else    low = middle + 1;   return FindLastKey(array,len,key,low,high);}int main(int argc,char* argv[]){  int len,times,key;  int RangeIndex = 0;  while(scanf("%d",&len) != EOF)  {    int* array = new int[len];    for(int i = 0;i < len; ++i)    {      scanf("%d",&array[i]);    }     scanf("%d",×);    for(int i = 0;i < times; i++)    {      scanf("%d",&key);      int FirstKey = FindFirstKey(array,len,key,0,len-1);      int LastKey = FindLastKey(array,len,key,0,len-1);      RangeIndex = LastKey - FirstKey + 1;       if(FirstKey == -1 || LastKey == -1)        cout<<0<<endl;      else        cout<<RangeIndex<<endl;    }     delete[] array;  }  return 0;}


0 0
原创粉丝点击