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);
            
        }
    }
  • 相关阅读:
    luogu P3801 红色的幻想乡
    [USACO07OPEN]吃饭Dining
    [SCOI2007]蜥蜴
    [SDOI2011]染色
    [USACO07DEC]Sightseeing Cows
    [HNOI2007]紧急疏散EVACUATE
    [ZJOI2009]假期的宿舍
    [SDOI2013]费用流
    [CQOI2009]跳舞
    使用chrony安装chrony
  • 原文地址:https://www.cnblogs.com/hupp/p/4768730.html
Copyright © 2011-2022 走看看