剑指offer-37-数字在数组中出现的次数

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

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

思路

二分查找
找到值之后向两边扩展,找相同的值

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        //二分判断是否有k
        int l=0,r=array.length-1;
        while(l<=r){
           int mid=(l+r)>>1;
            if(array[mid]<k){
                l=mid+1;
            }else if(array[mid]>k){
                r=mid-1;
            }else{
                l=mid;
                r=mid;
                break;
            }
        }
        // l!=r说明没有找到k
        if(l!=r){
            return 0;
        }
        int cnt=-1;
        while(l>=0&&array[l]==k){
            l--;
            cnt++;
        }
        while(r<=array.length-1 && array[r]==k){
            r++;
            cnt++;
        }
        return cnt;
    }
}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务