zoukankan      html  css  js  c++  java
  • 二分查找---查找区间

    查找区间

    34. Find First and Last Position of Element in Sorted Array

    Input: nums = [5,7,7,8,8,10], target = 8
    Output: [3,4]
    
    Input: nums = [5,7,7,8,8,10], target = 6
    Output: [-1,-1]
    

    题目描述:

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

    思路分析:

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

    代码:

    public int[]searchRange(int []nums,int target){
        if(nums==null||nums.length==0)
            return null;
        int first=0;
        int last=0;
        first=getFirst(nums,0,nums.length-1,target);
        last=getLast(nums,0,nums.length-1,target);
        if(first>-1&&last>-1){
            return new int[]{first,end};
        }
        return null;
    }
    public int getFirst(int []nums,int l,int h,int target){
        if(l>h)
            return -1;
        int mid=l+(h-l)/2;
        if(nums[mid]==target){
            if(mid>0&&nums[mid-1]!=target||mid==0){
                return mid
            }else{
                h=mid-1;
            }
        }else if(nums[mid]>target){
            h=mid-1;
        }else{
            l=mid+1;
        }	
         return getFirst(nums,l,h,target);
    }
    public int getLast(int []nums,int l,int h,int target){
        if(l>h)
            return -1;
        int mid=l+(h-l)/2;
        if(nums[mid]==target){
            if(mid<nums.length-1&&nums[mid+1]!=target||mid==nums.length-1){
                return mid;
            }else{
                l=mid+1;
            }
        }else if(nums[mid]>target){
            h=mid-1;
        }else{
            l=mid+1;
        }
        return getLast(nums,l,h,target);
    }
    
  • 相关阅读:
    idea 配置mapper.xml代码提示
    vue配置请求转发解决跨域问题
    MySQL 连接出现 Authentication plugin 'caching_sha2_password' cannot be loaded
    判断链表是否有环(Java实现)
    Java实现链表反转(借助栈实现)
    IHS代理遇到404的问题
    麒峰可视化表单设计器vue版本
    2021.5.30发布内容
    表单常见问题说明
    排序算法与查找算法在项目中的实际应用
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11106736.html
Copyright © 2011-2022 走看看