【資料結構】演算法 排序陣列中查詢元素的第一個和最後一個位置 Find First And Last Position of Element in Sorted Array
阿新 • • 發佈:2021-10-13
目錄
排序陣列中查詢元素的第一個和最後一個位置 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