zoukankan      html  css  js  c++  java
  • 牛客剑指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;
        }
    
  • 相关阅读:
    学习进度条73
    学习进度条72
    学习进度条71
    学习进度条70
    学习进度条69
    学习进度条68
    学习进度条67
    学习进度条66
    学习进度条65
    elasticsearch
  • 原文地址:https://www.cnblogs.com/dataoblogs/p/14121814.html
Copyright © 2011-2022 走看看