【剑指offer-JZ53】数字在升序数组中出现的次数

80 阅读1分钟

二分搜索到后,分别向两边扩展。看有多少相等的。

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array.length==0) return 0;
        int low=0,high=array.length-1;
        int count=0;
        while(low<=high){
            int mid = low+(high-low)/2;
            if(array[mid]<k) low=mid+1;
            else if (array[mid]>k) high = mid-1;
            else {
                int a = mid-1;  // 当前元素不要重复计算
                int b = mid;  
                
                // 向前面扩展
                while(a>=0 && array[a]==k){
                    count++;
                    a--;
                }
                // 向后面扩展
                 while(b<array.length && array[b]==k){
                    count++;
                    b++;
                }
                break;  // 因为扩展完所有相等的元素就肯定都找到了,所以没有必要再进入下一次while
            }
             
        }
        return count;
       
    }
}


题源:www.nowcoder.com/practice/70…