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

来源:互联网 发布:多益网络策划笔试题目 编辑:程序博客网 时间:2024/05/17 02:58

题目描述
统计一个数字在排序数组中出现的次数。
最简单的思路就是遍历数组,顺序查找,但是,既然是排序数组,我们自然就想到了二分查找。

/***利用二分查找,先找到开始的索引,再找到最后结束的索引,然后求差值 + 1;**/public class Solution {    public int GetNumberOfK(int [] array , int k) {        if (array == null || array.length == 0)            return 0;        int number = 0;        int start = getFirstIndex(array, 0, array.length - 1, k);        int end = getLastIndex(array, 0, array.length - 1, k);        if (start > -1 && end > -1)            number =  end - start + 1;        return number;    }    public int getFirstIndex(int []array, int start, int end, int target){        if (start > end) //必须要有这个判断,否则可能会发生数组越界异常            return -1;         int mid = (start + end) / 2;        if (target == array[mid]){            if (mid == start || array[mid - 1] != target)                return mid;            else                end = mid - 1;        }        else if (target < array[mid])            end = mid - 1;        else            start = mid + 1;        return getFirstIndex(array, start, end, target);    }    public int getLastIndex(int []array, int start, int end, int target){        if (start > end)            return -1;        int mid = (start + end) / 2;        if (target == array[mid]){            if (mid == end || array[mid + 1] != target)                return mid;            else                start = mid + 1;        }        else if (target > array[mid])            start = mid + 1;        else            end = mid - 1;        return getLastIndex(array, start, end, target);    }}
0 0