劍指offer____數字在排序陣列中出現的次數
阿新 • • 發佈:2018-12-21
統計一個數字在排序陣列中出現的次數。
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); } } };