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

原创 2015年07月10日 19:05:54


半段查找。

int GetFirstK(int* data, int length, int k, int start, int end)
{
if (start > end)
return -1;
int middleIndex = (start + end) / 2;
int middleData = data[middleIndex];
if (middleData == k)
{
if ((middleIndex > 0 && data[middleIndex - 1] != k) || middleINdex == 0)
return middleIndex;
else
end = middleIndex - 1;
}
else if (middleData > k)
end = middleIndex - 1;
else
start = middleIndex + 1;
return GetFirstK(data, length, k, start, end);
}


int GetLastK(int* data, int length, int k, int start, int end)
{
if (start > end)
return -1;
int middleIndex = (start + end) / 2;
int middleData = data[middleIndex];
if (middleData == k)
{
if ((middleIndex <length-1 && data[middleIndex +1] != k) || middleINdex == length-1)
return middleIndex;
else
start= middleIndex+1;
}
else if (middleData < k)
start = middleIndex +1;
else
end = middleIndex - 1;
return GetLastK(data, length, k, start, end);
}


int GetNumberOfK(int* data, int length, int k)
{
int number = 0;
if (data != NULL&&length > 0)
{
int first = GetFirstK(data, length, k,0, length - 1);
int last = GetLastK(data, length, k, 0, length - 1);
if (first > -1 && last > -1)
number = last - first + 1;
}
return number;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

《剑指offer》:[38]数字在排序数组中出现的次数

“沟通、学习能力就是看面试者能否清晰、有条理地表达自己,是否会在自己所得到的信息不够的情况下主动发问澄清,能否在得到一些暗示之后迅速做出反应纠正错误”                     ...
  • gogoky
  • gogoky
  • 2016-06-19 15:53
  • 1188

剑指offer面试题38:数字在已排序数组中出现的次数

数字在排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&tqId...

剑指Offer面试题38:数字在排序数组中出现的次数 Java实现

题目:数字在排序数组中出现的次数         统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,则输出次数4. 算法分析: 既然输入的数组是排...

剑指offer-面试题38-数字在排序数组中出现的次数

题目描述:统计一个数字在排序数组中出现的次数。例如输入排序数组{ 1, 2, 3, 3, 3, 3, 4, 5}和数字3 ,由于3 在这个数组中出现了4 次,因此输出4 。题目分析:利用改进的二分算法...

【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】

题目:统计一个数字:在排序数组中出现的次数。举例说明例如输入排序数组{ 1, 2, 3, 3, 3, 3, 4, 5}和数字3 ,由于3 在这个数组中出现了4 次,因此输出4 。解题思路  利用改进的...

剑指Offer----面试题38:数字在排序数组中出现的次数

题目: 统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。 方法一 从前向后一...

面试题 38: 数字在排序数组中出现的次数

一. 题目统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5} 和数字3,由于3在这个数组中出现了4次,因此输出4.代码请到我的代码库中下载 Point2Offer二...

剑指offer 面试题38—数字在排序数组中出现的次数

题目: 统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 解法一:O(n) 顺序遍历 ...

剑指Offer:面试题38 数字在排序数组中出现的次数

/* 数字在排序数组中出现的次数: 统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组 中出现了4次,因此输出4。 分析: 关键是找到2和...

面试题38 数字在排序数组找那个出现的次数

例如输入数组{1,2,3,3,3,3,4,5,6}中查找3出现的次数。 最为简单的方法就是从头遍历这个数组,统计3出现的次数,可是这样没有利用这是一个排序了的数组这个条件,时间复杂度O(n)。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)