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);
            
        }
    }
  • 相关阅读:
    冒泡排序的java实现
    linux磁盘挂载
    Spring第九篇:primary指定bean为首选对象
    Spring第八篇:容器中bean对象的创建顺序
    Spring第六篇:依赖的手动注入
    Spring第五篇:Spring bean的作用域
    Spring第四篇:bean实例的创建方式
    SpringBoot 整合 kaptcha 验证码
    Java 创建线程池的方式
    MySQL IF() 函数用法
  • 原文地址:https://www.cnblogs.com/hupp/p/4768730.html
Copyright © 2011-2022 走看看