Ejemplo n.º 1
0
/********************** 参考代码		******/
int getFirstK(int* data, int length, int k, int start, int end)
{
    if (start > end)
    {
        return -1;
    }

    int middleIndex = (start + end) / 2;
    int currentData = data[middleIndex];

    if (currentData == k)
    {
        if (middleIndex == 0 || (middleIndex > 0 && data[middleIndex - 1] != k) )
        {
            return middleIndex;
        }
        else
        {
            end = middleIndex - 1;
        }
    }
    else if (currentData > k)
    {
        end = middleIndex - 1;
    }
    else
    {
        start = middleIndex + 1;
    }

    return getFirstK(data, length, k, start, end);
}
Ejemplo n.º 2
0
 int GetNumberOfK(vector<int> data ,int k) {
     int result=0;
     
     if(data.empty())
         return 0;
     int start = 0;
     int end = data.size()-1;
     
     int first = getFirstK(data,k,start,end);
     int last = getLastK(data,k,start,end);
     
     if(first >-1 && last >-1)
         result = last - first+1;
     
     return result;
 }
Ejemplo n.º 3
0
int getNumbersOfK(int* data, int length, int k)
{
    int number = 0;

    if (data != NULL && length > 0)
    {
        int first = getFirstK(data, length, k, 0, length - 1);
        int last = getLastK(data, length, k, 0, length - 1);

        if (first > -1 && last > -1)
        {
            number = last - first + 1;
        }
    }

    return number;
}
Ejemplo n.º 4
0
 int getFirstK(vector<int> data, int k, int start, int end)
 {
     if(start > end)
         return -1;
     int midIndex = (start + end)/2;
     int midData = data[midIndex];
     
     if(midData == k)
     {
      	if(midIndex > 0 && data[midIndex-1] != k || midIndex == 0)
             return midIndex;
         else
             end = midIndex-1;
     }
     else if(midData > k)
         end = midIndex-1;
     else
         start = midIndex+1;
         
     return getFirstK(data,k,start,end);
 }