• 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ


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

    每个测试案例包括两行:

    第一行有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
    【解题思路】本题很容易想到用map和set数据结构来完成。但map的构建和最后对map的查询需要的时间代价很大,但空间和时间应该是不允许的。综合查询操作和数组的有序的特点,我们采用二分查找来确定元素是否在数组里面。若在数组里面,则将其周围的元素的个数统计完成后输出。

    AC code:

    #include <cstdio>
    #include <vector>
    using namespace std;
     
    int main()
    {
      int n,m,tt;
      while(scanf("%d",&n)!=EOF)
      {
        vector<int> arr(n);
        for(int i=0;i<n;++i)
          scanf("%d",&arr[i]);
        scanf("%d",&m);
        for(int i=0;i<m;++i)
        {
          scanf("%d",&tt);
          int a=0,b=n-1,mid,cnt=0;
          bool flg=false;
          while(a<=b)
          {
            mid=((a+b)>>1);
            if(arr[mid]==tt){flg=true;break;}
            if(arr[mid]>tt)b=mid-1;
            if(arr[mid]<tt)a=mid+1;
          }
          if(flg)
          {
            int idx=mid;
            while(idx<n &&arr[idx++]==tt)++cnt;
            idx=mid;
            while(idx>0 && arr[--idx]==tt)++cnt;
            printf("%d
    ",cnt);
          }else
            printf("0
    ");
        }
      }
      return 0;
    }
    /**************************************************************
        Problem: 1349
        User: huo_yao
        Language: C++
        Result: Accepted
        Time:740 ms
        Memory:4960 kb
    ****************************************************************/
    题目链接:http://ac.jobdu.com/problem.php?pid=1349

    九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299



  • 相关阅读:
    常用正则表达式
    Python的ASCII, GB2312, Unicode , UTF-8 相互转换
    Java 获取Linux 的IP地址
    MySql 取一天的开始时间和结束时间
    MyCat 主键ID自增长配置
    helm安使用
    Photoshop 7.0 安装及注册方法
    photoshop7.0 排版一寸照片、2寸照片
    DevOps工具链
    traefik安装
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248883.html
Copyright © 2020-2023  润新知