1. 程式人生 > >劍指offer____數字在排序陣列中出現的次數

劍指offer____數字在排序陣列中出現的次數

統計一個數字在排序陣列中出現的次數。

class Solution {
public:
    int count(vector<int> data ,int k, int pos)  //pos位置的值是k
    {
          int base = pos;
          int count = 1;
          int len =data.size();
        while(pos+1 <= len-1)
        { 
            if(data[pos + 1] == k)
            {
                count ++;
                pos ++;
            }
            else
            {
                break;
            }
        }
        pos = base;
        while(pos-1 >= 0)
        { 
            if( data[pos - 1] == k)
            {
                count ++;
                pos --;
            }
            else
            {
                break;
            }
        }
        return count;
    }
    int FindK(vector<int> data, int left, int right, int k)
    {
         int mid = (left + right) / 2;
         if (left > right) return -1;
         if (data[mid] == k)
        {
             return mid;
        }
         if (data[mid] > k)
         {
             return FindK(data, left, mid - 1, k);
          }
 
        else
        {
             return FindK(data, mid + 1, right, k);
        }
 }

    int GetNumberOfK(vector<int> data ,int k)
    {
        int left = 0;
        int right = data.size() - 1;
        int len =data.size();
       if(len == 0) return 0; //陣列長度是0,返回0    
       if(len == 1) return (data[0]==k)?1:0;  //陣列長度是1,如果這個元素等於k返回1,否則返回0
        int pos = FindK(data,left ,right,k);
        if(pos == -1)
        {
            return 0;
        }
        else
        {
            return count(data,k,pos);
        }
    }
};