38 数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。
解法一:顺序遍历 O(n)
解法二:用二分的思想 找出第一个k 和最后一个k O(logn)
C++:
1 class Solution { 2 public: 3 int GetNumberOfK(vector<int> data ,int k) { 4 int first = binarySearch(data , k) ; 5 int last = binarySearch(data , k+1) ; 6 if (first == data.size() || data[first] != k) 7 return 0 ; 8 else 9 return last - first ; 10 } 11 12 int binarySearch(vector<int> data ,int k) { 13 int left = 0 ; 14 int right = data.size() ; 15 while(left < right){ 16 int mid = left + (right - left) / 2 ; 17 if (data[mid] >= k){ 18 right = mid ; 19 }else{ 20 left = mid + 1 ; 21 } 22 } 23 return left ; 24 } 25 };