• 剑指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);
            
        }
    }
  • 相关阅读:
    【修订】为什么OO方法是有本质缺陷的?
    jQuery到底有什么好?
    qsort还是std::sort,一个排序引发的血案
    小小的吹一下集结号~
    谈谈学习与讨论风格:信任、质疑与交流
    职场中的我们,应该有多和谐?
    我到底是在干嘛?
    最近一些想法
    老饭新炒:object based、object oriented与弱类语言
    Flash性能分析与调试工具
  • 原文地址:https://www.cnblogs.com/hupp/p/4768730.html
Copyright © 2020-2023  润新知