ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【数据结构】算法 排序数组中查找元素的第一个和最后一个位置 Find First And Last Position of Element in Sorted Array

2021-10-13 14:01:27  阅读:146  来源: 互联网

标签:Last target nums int mid 位置 pos Element Sorted


目录

排序数组中查找元素的第一个和最后一个位置 Find First And Last Position of Element in Sorted Array

给定一个非递减排序数组nums 和目标target.找到target在数组中的开始位置和结束位置。如果数组中不存在这个数,返回[-1,-1]

nums = [5,7,7,8,8,10], target = 7
[1,2]

思路

这个要求,查到target的第一个位置和最后一个位置。

如何查第一个位置?

因为是有序的,可以通过二分查找来定位。

如何查找最后一个位置?

因为是有序的,在二分查找中,设定l,r逼近目标mid,返回最后一个位置。

 public int[] searchRange(int[] nums, int target) {
        int[] ans = new int[]{-1,-1};
        int pos = 0;
        int first = searchfirst01(nums,pos, target);
        if(first==nums.length||nums[first]!=target){
            return ans;
        }
        pos = first;
        int last = searchfirst01(nums, pos,target+1)-1;
        ans[0] = first;
        ans[1] = last;
        return ans;
    }
    public int searchfirst01(int[] arr,int pos, int target){
        if(arr.length==0){
            return -1;
        }
        int l = pos ;
        int r = arr.length-1;
        int mid = 0;
        while (r-l>3){
            mid = (l+r)>>1;
            if(arr[mid]>=target){
                r = mid;
            }
            else{
                l =mid+1;
            }
        }
        for (int i = l; i <=r ; i++) {
            if (arr[i]>=target){
                return i;
            }
        }
        return arr.length;
    }

searchfirst01 用来寻找数组中满足 x>=target的第一个位置,如果是target==7,就返回第一个位置;要想定位最后一个位置,就尝试寻找第一个x>=8的位置,然后-1;如果找不到满足条件的位置,就返回数组长度

Tag

math binary search

标签:Last,target,nums,int,mid,位置,pos,Element,Sorted
来源: https://www.cnblogs.com/dreamtaker/p/14917835.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有