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

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

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

二分的前提:有序(一提到有序,必须立马想到二分!)

int[] array = {1, 2, 3, 3, 3, 5} k=3
=> lowerIndex=2 upperIndex=5
int[] array = {1, 2, 4, 5} k=3
=> lowerIndex=2 upperIndex=2
public class Solution {

    private int upper_bound(int[] array, int val) {
        int l = 0, r = array.length - 1, mid;
        while (l <= r) {
            mid = (l + r) >> 1;
            if (array[mid] <= val) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return l;
    }

    private int lower_bound(int[] array, int val) {
        int l = 0, r = array.length - 1, mid;
        while (l <= r) {
            mid = (l + r) >> 1;
            if (array[mid] < val) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        return l;
    }

    public int GetNumberOfK(int[] array, int k) {
        if (array == null || array.length == 0) {
            return 0;
        }
        int lowerIndex = lower_bound(array, k);
        int upperIndex = upper_bound(array, k);
        return upperIndex - lowerIndex;
    }
}
全部评论
楼主答案是对的呢,upper_bound返回数组中第一个大于k的数的索引(也就是最后一个等于k的索引+1),lower_bound返回数组中第一个等于k的数的索引(也就是最后一个小于k的索引+1)
点赞 回复 分享
发布于 2022-07-18 23:56
你这答案明显不对。
点赞 回复 分享
发布于 2021-04-17 19:43
r l 最终都会在一起的吧
点赞 回复 分享
发布于 2020-03-25 12:00
upper写错了,应该return r;
点赞 回复 分享
发布于 2019-12-21 18:11

相关推荐

LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

更多
牛客网
牛客企业服务