您的位置:首页 > 其它

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

2017-02-13 18:32 309 查看
 


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

分类: c++http://blog.csdn.net/ruoxing_zpc/article/details/7948271
 
2012-09-05 21:31 514人阅读 评论(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;  

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