首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

微软面试题 - 在排序数组中,找到给定数字的出现次数

2012-10-17 
微软面试题 -- 在排序数组中,找出给定数字的出现次数在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2,

微软面试题 -- 在排序数组中,找出给定数字的出现次数
在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。

----------------------------------
网上一位仁兄写了如下解法:

int cnt(int a[], int v, int n){   int mid, b = 0, e = n-1;   int low, high;   while(b < e - 1)   {      mid = b + (e-b)/2;      if(a[mid] >= v)          e = mid;      else          b = mid;   }   if(a[b] == v)      low = b;   else if(a[e] == v)      low = e;   else      return 0;    b = 0;   e = n-1;   while(b < e -1)   {      mid = b +(e-b)/2;      if(a[mid] <= v)          b = mid;      else          e = mid;    }   if (a[e] == v)      high = e;   else if(a[b] == v)      high = b;   else       return 0;    return high - low + 1; }


个人认为可以先找到所指定的数,找到之后保留这个二分级数再向两端扩展可能会稍微快一点。

有几位仁兄说可以用hashtable来解决,但我感觉面试考的不是用hash

热点排行