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);
            
        }
    }
  • 相关阅读:
    Lodash JS实用类库 数组操作 延时执行 功能强大
    7.【nuxt起步】-Nuxt与后端数据交互
    vue图片懒加载
    猎鹰与龙飞船基于 Linux,采用 C++、Chromium 与 JS 开发
    | 和 ||,& 和 && 的区别
    Linux安装.net core
    Linux下程序后台运行:nohup和&
    vuejs如何调试代码
    全局安装 Vue cli3 和 继续使用 Vue-cli2.x
    导入sass文件
  • 原文地址:https://www.cnblogs.com/hupp/p/4768730.html
Copyright © 2011-2022 走看看