Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1,
-1]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
給定一個排好序的數組,找到target出現的開始位置和結束位置並以數組的形式返回。要求時間複雜度爲log(n),所以容易想到用二分查找算法,先找到數組開始的索引,然後再調用二分查找,讓target增加1,這個時候調用二分查找函數返回的是經過所有相同的target之後,第一個與target不同的數字,然後用返回的值再減1即可。
int start = SearchRange.BinarySearch(nums,target);
if(nums.length==start||nums[start]!=target){
return new int []{-1,-1};
}
int [] res = new int [2];
res[0] = start;
res[1] = SearchRange.BinarySearch(nums,target+1)-1;
return res;
}
public static int BinarySearch(int [] nums,int target){
int low = 0;
int high = nums.length;
while(low<high){
int mid = low+(high-low)/2;
if(target>nums[mid]){low = mid+1;}
else { high = mid;}
}
return low;