`

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

阅读更多
在排序数组中,找出给定数字的出现次数,比如 [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
分享到:
评论

相关推荐

    面试题-微软数据结构 

    给定一个整数数组和一个整数`k`,找出数组中最小的`k`个元素。 **解决方案**: 1. **使用最小堆**:构建一个大小为`k`的最小堆,遍历整个数组,维护这个最小堆。 - 遍历数组中的每个元素,如果堆的大小小于`k`,则...

    微软面试题 数据结构 C++

    在二元树中找出和为某一值的所有路径 - **背景**:二元树(Binary Tree)是一种常见的非线性数据结构,用于存储具有层次关系的信息。在树的上下文下,路径是从根节点到任意叶子节点的一系列连续节点。 - **目标**:...

    微软、谷歌、百度等公司经典面试100题[第101-170题].pdf

    - **题目描述**:在排序数组中找出给定数字的出现次数。 - **解决方案**:可以使用二分查找找到目标值的起始和结束位置。 **11. 平面上点的斜率最大值** - **题目描述**:平面上N个点,找出斜率最大的那条直线所...

    新鲜出炉:微软等数据结构+算法面试100题第81-100题[V0.1版最后20题]

    - 在文件中找出所有相反的字符串对。 - 解释STL中的`set`实现方式。 - **知识点**: - 数组扫描和比较技巧。 - 字符串处理技术。 - STL容器实现原理,特别是`set`的数据结构基础(通常是红黑树)。 ##### 第82...

    Java 微软面试题

    1. **两两之差绝对值最小的值**:这是一个关于数组处理的问题,可以通过排序数组然后计算相邻元素之间的差值来解决,最小的差值即为所求。 2. **检查字符是否是整数**:可以通过遍历字符串并检查每个字符是否在'0'-...

    微软面试15题

    【微软面试题解析】 1. 两两之差绝对值最小的值:此题考察数组处理和最优化问题。可以通过排序数组,然后计算相邻元素之间的差值,找到最小的差值。 2. 字符转整数函数:可以使用C++的`std::stoi`函数,或者自定义...

    [第二部分]精选微软等公司结构+算法面试100题[41-60题]

    **解题思路**:可以使用哈希表记录每个元素出现的次数,遍历数组的同时更新哈希表,最后检查哈希表中出现次数超过一次的元素即可。 ### 第46题:字符串相似度计算 **题目描述**:给出两个字符串,计算它们之间的...

    华为面试180题(软件)

    - **问题**: 在排序数组中找出给定数字的出现次数。 - **解法**: 使用二分查找找到目标数字的第一个和最后一个位置,相减即为出现次数。 **12. 平面内斜率最大的直线** - **问题**: 求平面上N个点中斜率最大的...

    历年微软面试中出现的算法题1

    以下是一些在微软面试中出现的算法题的详细解析: 1. **两数之和** (2次出现) 这是一道基础的数组问题,要求找出数组中两个数的和等于给定的目标值。可以使用哈希表存储每个元素及其索引,然后检查目标值减去当前...

    微软公司面试题

    ### 把二元查找树转变成...以上解析涵盖了从微软面试题中提取的关键知识点,包括树结构的转换、高效数据结构的设计、子数组和的计算、二元树路径的探索以及最小元素的查找,展示了在解决算法问题时应采取的策略和方法。

    [第一部分]精选微软等公司数据结构+算法经典面试100题[1-40题]

    根据提供的信息,我们可以总结出这份文档主要关注的是微软等公司的数据结构与算法面试题目,特别是前40题的内容。下面将根据文档中的标题、描述、标签以及部分内容来详细阐述几个典型的数据结构与算法面试题目的知识...

    微软等公司数据结构+算法面试100题[第1-80题]

    在二元树中找出和为某一值的所有路径** - **题目背景**: 二元树(也称为二叉树)是一种树形数据结构,每个节点最多有两个子节点。 - **问题描述**: 给定一个整数`target`和一棵二元树,找出所有从根节点到叶子节点...

    微软等公司数据结构_算法面试第1-100题汇总.pdf

    在二元树中找出和为某一值的所有路径 - **题目描述**:输入一个整数和一棵二元树,打印出和与输入整数相等的所有路径。 - **解决方案**:采用深度优先搜索(DFS)策略,从根节点开始遍历,每次遍历都计算从根到...

    微软公司等数据结构+算法面试100题 第1 100题 全部出炉

    - 该问题要求在二元树中找出从根节点到叶子节点的所有路径,这些路径上的节点值之和等于给定值。 - 需要使用深度优先搜索(DFS)算法,递归遍历二元树的所有节点,并将路径上的节点值累加,一旦到达叶子节点且和...

    微软面试题库

    本题要求在给定的二叉树中找出所有从根节点到叶子节点的路径,这些路径上的节点值之和等于给定的目标值。 **解题思路:** 1. **深度优先搜索(DFS):**采用深度优先搜索策略,遍历二叉树的所有路径。 2. **路径...

Global site tag (gtag.js) - Google Analytics