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

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

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

解法一:手写二分法查找

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array==null||array.length==0) return 0;
        int p=find(array, k, 0, array.length-1);
        if(p==-1) return 0;
        int q=p;
        int ans=1;
        while(p-1>=0&&array[p-1]==array[p]) {ans++;p--;}
        while(q+1<=array.length-1&&array[q]==array[q+1]) {ans++;q++;}
        return ans;
    }

    int find(int[] array, int k, int l, int r){
        if(l==r&&array[l]!=k)  return -1;//单独删除这一行 会有数组越界问题
        if(l+1==r&&array[l]!=k&&array[r]!=k) return -1;;//单独删除这一行 会有数组越界问题
        int m=(l+r)/2;
        if(array[m]==k) return m;
        if(array[m]<k) return find(array, k, m, r);
        return find(array, k, l, m);
    }
}

解法二:库函数binarySearch

import java.util.Arrays;
public class Solution {

    public int GetNumberOfK(int [] array , int k) {
        int index = Arrays.binarySearch(array, k);
        if(index<0)return 0;
        int ans = 1;
        for(int i=index+1; i < array.length && array[i]==k; i++)
            ans++;
        for(int i=index-1; i >= 0 && array[i]==k; i--)
            ans++;
        return ans;

    }
}
全部评论

相关推荐

比亚迪汽车新技术研究院 硬件工程师 总包21左右 硕士
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
Java抽象带篮子:难蚌,点进图片上面就是我的大头😆
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务