数字在排序数组中出现的次数

题目描述

统计一个数字在排序数组中出现的次数
 
思路:用二分法分别查找数字在数组中出现的开头和结尾的位置,次数=结尾-开头+1,时间复杂度为O(logn)
 1 int getFirstK(vector<int> &data, int k)
 2 {
 3     int begin=0;
 4     int end=data.size()-1;
 5     while(begin<=end)
 6     {
 7         int mid=(begin+end)/2;
 8         if(data[mid]>k)end=mid-1;
 9         else if(data[mid]<k)begin=mid+1;
10         else{
11             if(mid==0 || data[mid-1]!=k)return mid;
12             end=mid-1;
13         }
14     }
15     return -1;
16 }
17 int getLastK(vector<int> &data, int k)
18 {
19     int begin=0;
20     int end=data.size()-1;
21     while(begin<=end)
22     {
23         int mid=(begin+end)/2;
24         if(data[mid]>k)end=mid-1;
25         else if(data[mid]<k)begin=mid+1;
26         else{
27             if(mid==data.size()-1 || data[mid+1]!=k)return mid;
28             begin=mid+1;
29         }
30     }
31     return -1;
32 }
33 int GetNumberOfK(vector<int> data ,int k) {
34     if(data.size()==0)return 0;
35     int left=getFirstK(data, k);
36     int right=getLastK(data, k);
37     if(left==-1 || right==-1)return 0;
38     return right-left+1;
39 }

 

 

posted @ 2018-01-31 16:54  jeysin  阅读(134)  评论(0编辑  收藏  举报