剑指offer 数字在排序数组中出现的次数

题目描述

统计一个数字在排序数组中出现的次数。

 

思路:看到排序数组,首先考虑二分查找。我们找到数字在排序数组中最先出现和最后出现的下标,即得到次数。

 1 class Solution {
 2 public:
 3     int GetNumberOfK(vector<int> data ,int k) {
 4         int len = data.size();
 5         int left = 0, right = len - 1, l, r;
 6         int mid;
 7         // 先找最左边的index,如果data[mid] == k,我们也将right = mid - 1,
 8         // 因为我们只要最左边的index,下面找最右边的index也是同理。
 9         while (left <= right) {
10             mid = (right - left) / 2 + left;
11             if (data[mid] >= k) {
12                 right = mid - 1;
13             } else {
14                 left = mid + 1;
15             }
16         }
17         l = left;
18         right = len - 1;
19         while (left <= right) {
20             mid = (right - left) / 2 + left;
21             if (data[mid] <= k) {
22                 left = mid + 1;
23             } else {
24                 right = mid - 1;
25             } 
26         }
27         r = right;
28         return (r - l + 1);
29     }
30 };

 

posted @ 2019-04-02 16:20  琴影  阅读(414)  评论(0编辑  收藏  举报