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

    xiaoxiao2021-03-25  56

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

    /** *利用二分查找,先找到开始的索引,再找到最后结束的索引,然后求差值 + 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); } }
    转载请注明原文地址: https://ju.6miu.com/read-37760.html

    最新回复(0)