码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-09-02 00:15:43      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

采用二分查找的方法,一旦找到,left++,right--,--middle++,扩展查找。

开始while(left<right),当n=1时不能进入循环,应写while(left<=right)

 1 class Solution {
 2 public:
 3     int GetNumberOfK(vector<int> data ,int k) {
 4         int n=data.size();
 5         if(n<1) return 0;
 6         int left=0;
 7         int right=n-1;
 8         int middle=0;
 9         int count=0;
10         while(left<=right){
11             if(data[left]==k){
12                 while(data[left]==k&&left<n){
13                     left++;
14                     count++;
15                 }
16                 return count;
17             }
18             if(data[right]==k){
19                 while(data[right]==k&&right>=0){
20                     right--;
21                     count++;
22                 }
23                 return count;
24             }
25             middle=left+(right-left)/2;
26             if(data[middle]==k){
27                 count++;
28                 int m=middle-1;
29                 while(data[m]==k&&m>=0){
30                     m--;
31                     count++;
32                 }
33                 m=middle+1;
34                 while(data[m]==k&&m<n){
35                     m++;
36                     count++;
37                 }
38                 return count;
39             }
40             if(data[middle]>k)
41                 right=middle-1;
42             else
43                 left=middle+1;
44         }
45         return count;
46     }
47 };

 

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

标签:

原文地址:http://www.cnblogs.com/zl1991/p/4777101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!