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

 

posted @ 2018-05-10 18:15  __Meng  阅读(200)  评论(0编辑  收藏  举报