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

    排序数组中查找元素的第一个和最后一个位置 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

  • 相关阅读:
    正则元字符总表
    Request中的各种地址
    JSONP实例
    【Kindeditor编辑器】 文件上传、空间管理
    【加密算法】SHA
    【加密算法】DES
    【加密算法】3DES
    【加密算法】Base64
    【加密算法】MD5
    【加密算法】AES
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14917835.html
Copyright © 2011-2022 走看看