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;
}


数字在排序数组中出现的次数 java

题目描述 统计一个数字在排序数组中出现的次数。 解题思路 数组是排序的,所以重复出现的数字是相邻排列的。 用二分查找算法,找到第一次出现的位置,和 最后一次出现的位置。 判断第一次出现的位置...
  • samjustin1
  • samjustin1
  • 2016年07月17日 16:05
  • 1381

Python:数字在排序数组中出现的次数

牛客网上的剑指 offer的在线编程: 题目描述 统计一个数字在排序数组中出现的次数。 # -*- coding:utf-8 -*- ''' 数字在排序数组中出现的次数 题目...
  • Lynette_bb
  • Lynette_bb
  • 2017年07月20日 02:26
  • 306

数字在排序数组中出现的次数(Java实现)

本题为剑指offer面试题38 牛客网测试地址:https://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2...
  • zjkC050818
  • zjkC050818
  • 2017年05月12日 13:01
  • 429

统计数字在排序数组中出现的次数

题目:统计一个数字在排序数组中出现的次数。例如输入输入排序数组{1,2,3,3,4,5}和数字3,输出2. 思路:使用二分查找法,时间复杂度O(logN) package offer; /** ...
  • u013238950
  • u013238950
  • 2016年03月12日 20:13
  • 1193

算法-数字在排序数组中出现的次数

题目: 统计一个数字在排序数组中出现的次数,比如排序数组为{1,2,3,3,3,4,5},那么数字3出现的次数就是3。解题思路: 1.首先,遍历数组肯定就能知道某个数字的个数,此时的时间复杂度O(...
  • chaipp0607
  • chaipp0607
  • 2017年08月09日 14:27
  • 273

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

题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 思路: 用二分查找,分别找出第一个3,和最后一个3...
  • lskyne
  • lskyne
  • 2013年08月28日 10:23
  • 2270

面试算法(三十八)数字在排序数组中出现的次数

1、题目:
  • woshibendangao
  • woshibendangao
  • 2014年07月17日 18:51
  • 556

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

在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。 乍一看,挺简单的,遍历...
  • u010039377
  • u010039377
  • 2014年06月15日 23:30
  • 1227

【1】数字在数组中出现的次数

题目:统计一个数字k在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次 方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n)...
  • cgl1079743846
  • cgl1079743846
  • 2014年05月23日 20:09
  • 1719

数组中超过出现次数超过一半的数字以及超过三分之一的两个数字,超过四分之一的三个数字

//============================================================================ // Name : 100题...
  • damotiansheng
  • damotiansheng
  • 2016年07月09日 19:32
  • 1299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:38.数字在排序数组中出现的次数
举报原因:
原因补充:

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