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 };

猜你喜欢

转载自www.cnblogs.com/mengchunchen/p/9021023.html