牛客剑指Offer-数字在升序数组中出现的次数

题目

统计一个数字在升序数组中出现的次数。
示例1

输入
[1,2,3,3,3,3,4,5],3
返回值
4

题解

第一种最简单的方法是O(n)复杂度。遍历数组统计结果。

 public int GetNumberOfK(int [] array , int k) {
    
    
       if(array==null||array.length==0){
    
    
           return 0;
       }
        int len = array.length;
        int count = 0;
        for(int i=0;i<len;i++){
    
    
            if(k==array[i]){
    
    
                count++;
            }
        }
        return count;
    }

但是这种方法没用上有序数组的这个特点,说道有序数组
,首先想起来的是二分查找,因此可以利用二分查找找出第一个出现k的位置后最后出现k的位置,两者相减就是结果。

  public int GetNumberOfK(int [] array , int k) {
    
    
       if(array==null||array.length==0){
    
    
           return 0;
       }
        return biSearch(array,k+0.5)-biSearch(array,k-0.5);
    }
    public int biSearch(int[] data, double num){
    
    
        int s = 0, e = data.length-1;     
        while(s <= e){
    
    
            int mid = (e - s)/2 + s;
            if(data[mid] < num)
                s = mid + 1;
            else if(data[mid] > num)
                e = mid - 1;
        }
        return s;
    }

Guess you like

Origin blog.csdn.net/qq_43672652/article/details/110823598