- /************************************************************************/
- /* 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;
- }
在排序数组中,找出给定数字出现的次数
最新推荐文章于 2018-07-23 16:03:06 发布
本文介绍了一种高效的方法来确定排序数组中特定数值出现的频次。通过使用两次二分查找,分别定位该数值首次及末次出现的位置,从而计算其在数组中的总出现次数。
1051

被折叠的 条评论
为什么被折叠?



