二分法查找有序数组中某元素个数

来源:互联网 发布:一般sql培训多少钱 编辑:程序博客网 时间:2024/05/22 05:29
class Solution {public:int BinarySearch(vector<int> data, int low, int high, int k){    while (low<=high)    {        int m = (high + low) / 2;        if (data[m] == k)return m;        else if (data[m] < k) low = m+ 1;        else high = m - 1;    }    return -1;}    int GetNumberOfK(vector<int> data ,int k) {        if(data.size()==0)return 0;         int len=data.size();        int KeyIndex=0;                 KeyIndex=BinarySearch(data,0,len-1,k);       if(KeyIndex==-1) return 0;        int sumber=1;        int m=KeyIndex-1;        int n=KeyIndex+1;              while(m>=0&&data[m]==k)        {                m--;sumber++;            }        while(n<len&&data[n]==k)        {               n++; sumber++;            }        return sumber;    }};
具体算法设计:二分查找找到k的所在位置,在原数组里面分别左右对k的出现次数进行统计

原创粉丝点击