zoukankan      html  css  js  c++  java
  • 剑指offer-第六章面试中的各项能力(数字在排序数组中出现的次数)

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

    思路:采用二分查找,找到该数字在数组中第一次出现的位置,然后再找到组后一个出现的位置。两者做减法运算再加1.时间复杂度为O(logn)

    Java代码:

    //数字K在排序数组中出现的次数
    //思路:用二分查找,找到第一个k和最后一个K
    public class NumberCount {
        public int numberCount(int[] a,int k){
            if(a==null)
                return 0;
            int start=0;
            int end=a.length-1;
            int first=firstK(a,k,start,end);
            int last=endK(a,k,start,end);
            return last-first+1;
        }
        //通过二分查找,找到最后一个K
        private int endK(int[] a, int k, int start, int end) {
            if(a==null)
                return 0;
            int middle=(start+end)/2;
            if(a[middle]==k){
                if(a[middle]==k&&a[middle+1]!=k||middle==a.length-1)
                    return middle;
                else
                     start=middle+1;
            }
            else if(a[middle]<k)
                start=middle+1;
            else
                end=middle-1;
            return endK(a,k,start,end);
        }
        //通过二分查找找到第一个K
        public int firstK(int[] a, int k, int start, int end) {
            if(a==null)
                return 0;
            int middle=(start+end)/2;
            if(a[middle]==k){
                if(middle==0||a[middle-1]!=k&&a[middle]==k)
                    return middle;
                else
                    end=middle-1;
            }
            else if(a[middle]<k)
                start=middle+1;
            else
                end=middle-1;
            return firstK(a,k,start,end);
        }
        public static void main(String[] args) {
            int[] a={1,3,3,3,7,4,5};
            NumberCount numberCount=new NumberCount();
            int number=numberCount.numberCount(a, 3);
            System.out.println(number);
            
        }
    }
  • 相关阅读:
    取文本中数字
    成绩统计excel
    excel日期转化为周次
    ConcurrentHashMap之实现细节(转)
    线程互斥(互斥变量)
    Spring的历史论(数据脱敏)
    Java之递归
    触摸java常量池
    利用ant脚本 自动构建svn增量/全量 系统程序升级包
    JDK1.5/1.6/1.7新特性
  • 原文地址:https://www.cnblogs.com/hupp/p/4768730.html
Copyright © 2011-2022 走看看