当前位置:编程学习 > C/C++ >>

数字在排序数组中出现的次数

统计一个数字在排序数组中出现的次数。
输入:
每个测试案例包括两行:
第一行有1个整数n,表示数组的大小。1<=n <= 10^6。
第二行有n个整数,表示数组元素,每个元素均为int。
第三行有1个整数m,表示接下来有m次查询。1<=m<=10^3。
下面有m行,每行有一个整数k,表示要查询的数。
输出:
对应每个测试案例,有m行输出,每行1整数,表示数组中该数字出现的次数。
样例输入:
8
1 2 3 3 3 3 4 5
1
3
样例输出:
           4
思想:使用二分法找到具体数字的位置,然后需要前后扫描来确定数字的个数~^_^
代码AC:
[cpp] 
// 用2分法!! ^_^  
  
#include <stdio.h>  
#include <stdlib.h>  
  
int main()  
{  
    long int n, i, cou, mid, low, high;  
    int  m, *num, k;  
      
    while( scanf( "%ld", &n ) != EOF )  
    {  
           num = ( int* )malloc( sizeof( int ) * n );  
             
           for( i = 0; i < n; i++ )  
           {  
                scanf("%d", &num[i]);  
           }  
             
           scanf("%d", &m);  
             
           while( m-- )  
           {  
                  scanf("%d", &k);  
                    
                  low = 0;  
                  high = n - 1;  
                  while( low <= high )  
                  {  
                         mid = ( low + high ) / 2;  
                         if( k == num[mid] )  
                         {  
                             break;  
                         }  
                         else if( k > num[mid] )  
                         {  
                              low = mid + 1;  
                         }  
                         else  
                         {  
                             high = mid - 1;  
                         }  
                  }  
                    
                  cou = 0;  
                  i = mid;  
                  while( i < n )  
                  {  
                         if( num[i] == k )  
                         {  
                             cou++;  
                             i++;  
                         }  
                         else  
                         {  
                             break;  
                         }  
                  }  
                    
                  i = mid - 1;  
                  while( i >= 0 )  
                  {  
                         if( num[i] == k )  
                         {  
                             cou++;  
                             i--;  
                         }  
                         else  
                         {  
                             break;  
                         }  
                  }  
                    
                  printf("%d\n", cou);  
           }  
    }  
      
    return 0;  
}  
 
 
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,