使用二分查找法统计一个数字在排序数组中出现的次数

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

http://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2

利用二分查找法,找到左边界和右边界来确定个数。
假设找到的坐标为index,检查array[index-1]处的值是不是也为所查找的数,
是的话则使用二分查找法在0至index-1范围内查找,直到array[index-1]处不为所查数,获得左边界。
同样检查array[index+1]处的值是不是也为所查找的数,获得右边界。
使用Arrays里自带的binarySearch()方法,正好熟悉下Arrays类,xiaxiaixia~

public int GetNumberOfK(int[] array, int k) {
        int left = 0, right = -1;
        int index = Arrays.binarySearch(array, k);
        left = index;
        if (index < 0) return 0;
        while (index != 0 && array[index - 1] == k) {
            index = Arrays.binarySearch(array, 0, index, k);
            left = index;
        }
        index = Arrays.binarySearch(array, k);
        right = index;
        while (index != array.length - 1 && array[index + 1] == k) {
            index = Arrays.binarySearch(array, index + 1, array.length, k);
            right = index;
        }
        return right - left + 1;
    }
全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务