zoukankan      html  css  js  c++  java
  • 37.数字在排序数组出现的次数

    题目描述:

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

    思路分析:

      由题目知道这道题是属于排序数组中的查找问题,那么我们首先想到的就是二分查找。由于要在排序数组中找一个数字出现的次数,那么我们只要确定这个数字第一次出现的地方和最后一个出现的位置那么我们就可以算出它在数组出现的次数。二分查找算法首先拿数组的中间数字和K作比较,如果中间的数比K大,那么我们下一轮只需要在前半段进行查找。如果比K小,那我们在后半段进行查找。如果等于K那我们要判断这个K是不是第一个K,那么我们就需要看前一个数字是不是K,如果不是那么中间数就是第一个K,如果前一个数字是K,那么第一个K肯定在数组的前段,下一阶段我们就在前半段进行查找。同样的要找最后一个K首先拿数组的中间数字和K作比较,如果中间的数比K大,那么我们下一轮只需要在前半段进行查找。如果比K小,那我们在后半段进行查找。如果等于K那我们要判断这个K是不是最后一个K,那么我们就需要看后一个数字是不是K,如果不是那么中间数就是最后一个K,如果后一个数字是K,那么最后一个K肯定在数组的后半段,下一阶段我们就在后半段进行查找。

    代码:

    public class Test{
        public int GetNumberOfK(int []nums,int K){
            if(nums.length==0||nums==null)
                return 0;
            int first=GetFirstK(nums,0,nums.length-1, K);
            int last=GetLastK(nums,0,nums.length-1,K);
            if(first>-1&&last>-1){
                return last-first+1;
            }
                return 0;
    
        }
        public int GetFirstK(int []nums,int start,int end,int k){
            if(start>end)
                return -1;
            int mid=(start+end)/2;
            int midnum=nums[mid];
            if(midnum==k){
                if(mid>0&&nums[mid-1]!=k||mid==0)
                    return mid;
                else
                    end=mid-1;
            }else if(midnum>k){
                end =mid-1;
            }else{
                start=mid+1;
            }
            return GetFirstK(nums,start,end,k);
        }
        public int GetLastK(int[]nums,int start,int end,int k){
            if(start>end)
                return -1;
            int mid=(start+end)/2;
            int midnum=nums[mid];
            if(midnum==k){
                if(mid<nums.length-1&&nums[mid+1]!=k||mid==nums.length-1)
                    return mid;
                else
                    start=mid+1;
            }else if(midnum>k){
                end=mid-1;
            }else{
                start=mid+1;
            }
            return GetLastK(nums,start,end,k);
        }
    
  • 相关阅读:
    odoo10 按钮点击时的弹窗提示确认消息
    odoo10 行表创建新数据时默认取值
    odoo10 关于ODOOsearch视图
    odoo10 many2one字段下拉更多选项时自定义排序方法
    变量的注释(python3.6以后的功能)
    蓝图的使用
    线程
    基础总结1
    请求上下文和应用上下文
    flask-script扩展
  • 原文地址:https://www.cnblogs.com/yjxyy/p/10846840.html
Copyright © 2011-2022 走看看