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:数字在排序数组中出现的次数】

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

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

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

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

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

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

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

剑指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。 方法一 从前向后一...

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

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

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

//如果直接遍历数组,则时间复杂度是O(n); //如果用二分法分别找出第一次出现的位置和最后一次的位置,再相减,时间复杂度就是O(log(n)); #include using namespace ...

剑指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 。题目分析:利用改进的二分算法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:38.数字在排序数组中出现的次数
举报原因:
原因补充:

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