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

题目描述

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

思路一:
暴力求解,遍历,累加和k值相等的个数。

public int GetNumberOfK(int [] array , int k) {
    if(array.length == 0) return 0;
    int res = 0;
    for(int i=0;i<array.length;i++){
        if(array[i] == k)
            res++;
        if(array[i] > k)
            return res;
    }
    return res;
}

思路二:
先用二分查找找到k值的一个位置,之后再计算k值前后和k值相同的个数。

//先用二分法找到对应的k值的位置,之后再计算k值前后和k值相同的个数
public int GetNumberOfK(int [] array , int k) {
    int index = binaryFind(array, 0, array.length-1, k);
    if(index == -1) return 0;
    int res = 1;
    int pre = index,rear = index;
    while(--pre>=0) {
        if(array[pre]==k)
            res++;
        else
            break;
    }
    while(++rear<=array.length-1) {
        if(array[rear]==k)
            res++;
        else
            break;
    }
    return res;   
   }

//二分查找
private int binaryFind(int[] array, int start, int end, int k){
    if(start>end) return -1;
    while(start<=end){
        int mid = (start+end)/2;
        if(array[mid] == k) return mid;
        else if(array[mid] > k)
            end = mid - 1;
        else
            start = mid + 1;
    }
    return -1;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值