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

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

时间:2020-03-04 20:46:25      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:int start   二分查找   数组   art   减法   pre   offer   统计   turn   

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

题目

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

思路

虽然递归已经是O(n)了,但是还要缩小,所以二分查找,找到前后的位置就行了。查找设k-0.5和k+0.5,反正都没有,所以能找到应该在的位置,然后减法就行。

代码

  public int search(int[] array, double k) {
    int l = 0;
    int r = array.length - 1;
    int m = (r - l) / 2 + l;
    while (l <= r) {
      if (array[m] < k) {
        l = m + 1;
      } else {
        r = m - 1;
      }
      m = (r - l) / 2 + l;
    }
    return l;
  }

  public int GetNumberOfK(int[] array, int k) {
    int start = search(array, k - 0.5);
    int end = search(array, k + 0.5);
    return end - start;
  }

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

标签:int start   二分查找   数组   art   减法   pre   offer   统计   turn   

原文地址:https://www.cnblogs.com/blogxjc/p/12411887.html

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