剑指offer题解 数字在排序数组中出现的次数

来源:互联网 发布:河南科技学院网络教学 编辑:程序博客网 时间:2024/06/17 12:05

题目描述

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

用两次二分查找,先找最前面的那个数字,再找最后面的那个数字,两者中间的个数即为结果。

public class Solution {    public int GetNumberOfK(int [] array , int k) {        if(array==null||array.length==0) return 0;        int low=0;        int high=array.length-1;        int mid=-1;        int left=0;        int right=0;        while(low<=high){            mid=(low+high)/2;            if(array[mid]==k){                if((mid>0&&array[mid-1]!=k)||mid==0){                    left=mid;                    break;                }else{                    high=mid-1;                }            }else if(array[mid]>k){                high=mid-1;            }else{                low=mid+1;            }        }        if(high<low) return 0;        low=0;        high=array.length-1;         while(low<=high){            mid=(low+high)/2;            if(array[mid]==k){                if((mid<array.length-1&&array[mid+1]!=k)||mid==array.length-1){                    right=mid;                    break;                }else{                    low=mid+1;                }            }else if(array[mid]>k){                high=mid-1;            }else{                low=mid+1;            }        }        return right-left+1;    }}
0 0