您的位置:首页 > 其它

在排序数组中,找出给定数字出现的次数

2013-05-19 16:43 141 查看
分类: c++2012-09-05
21:31 291人阅读 评论(0) 收藏 举报

[cpp] view
plaincopy

/************************************************************************/

/* 10、在排序数组中,找出给定数字出现的次数 */

/************************************************************************/

//二分查找,二分查找key第一次出现的位置,二分查找最后一次出现的key

//返回两者相减+1或者找到第一次出现的位置,向后查找

int binarySearchFirstPos(int * iArr, int l, int h, int key)

{

while(l <= h )

{

int mid = (l + h) / 2;

if(iArr[mid] < key)

l = mid +1;

else if(iArr[mid] > key)

h = mid - 1;

else

{

if(mid == l || iArr[mid - 1] != key)

return mid;

else

h = mid - 1;

}

}

return -1;

}

int binarySearchLastPos(int * iArr, int l, int h, int key)

{

while(l <= h)

{

int mid = (l + h) / 2;

if(iArr[mid] < key)

l = mid + 1;

else if(iArr[mid] > key)

h = mid - 1;

else

{

if(mid == h || iArr[mid + 1] != key)

return mid;

else

l = mid + 1;

}

}

return -1;

}

int numOfKey(int * iArr, int length, int key)

{

int firstPos = binarySearchFirstPos(iArr, 0, length - 1, key);

int lastPos = binarySearchLastPos(iArr, 0, length - 1, key);

cout << firstPos << "\t" << lastPos << endl;;

if(firstPos == -1)

return 0;

else

return lastPos - firstPos + 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: