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

来源:互联网 发布:中走丝hf凹模编程视频 编辑:程序博客网 时间:2024/04/30 03:33
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。

关键词:
二分查找

class Solution{public:    int GetNumberOfK( vector<int> data, int k )    {        int number = 0;        if ( data.empty() )            return 0;        int first = GetFirstK( data, k, 0, data.size()-1 );        int last = GetLastK( data, k, 0, data.size()-1 );        if ( first > -1 && last > -1 )            number = last - first + 1;        return number;    }    int GetFirstK( vector<int> data, int k, int start, int end )    {        if ( start > end )            return -1;        int mid = ( start + end ) / 2;        if ( data[mid] == k )        {            if ( (mid > 0 && data[mid-1] != k) || mid == 0 )                return mid;            else                end = mid-1;        }        else if ( data[mid] < k )        {            start = mid+1;        }        else             end = mid-1;        return GetFirstK( data, k, start, end );    }    int GetLastK( vector<int> data, int k, int start, int end )    {        if ( start > end )            return -1;        int mid = ( start + end ) / 2;        if ( data[mid] == k )        {            if ( (mid < data.size()-1 && data[mid+1] != k) || mid == data.size()-1 )                return mid;            else                 start = mid+1;        }        else if ( data[mid] < k )        {            start = mid+1;        }        else         {            end = mid-1;        }        return GetLastK( data, k, start, end );    }};int main( void ){    Solution sos;    vector<int> data = { 1, 2, 3, 3, 3, 3, 4, 5 };    cout << sos.GetNumberOfK( data, 3 ) << endl;    return 0;}