Given an array of integers nums
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]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6
Output: [-1,-1]
二分查找,通过从一个在前半截开始一个在后半截开始,继而查找到两个;
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] result = new int[2];
result[0]= findfirst(nums,target);
result[1]=findlast(nums,target);
return result;
}
private int findfirst(int[] nums, int target){
int idx = -1;
int low = 0;
int high = nums.length -1;
while(low <= high)
{
int mid =(low+high)/2;
if(nums[mid]==target)idx=mid;
if(nums[mid]>=target){
high=mid-1;
}else low = mid+1;
}
return idx;
}
private int findlast(int[] nums, int target){
int idx = -1;
int low = 0;
int high = nums.length -1;
while(low <= high)
{
int mid =(low+high)/2;
if(nums[mid]==target)idx=mid;
if(nums[mid]<=target){
low = mid+1;
}else
high=mid-1;
}
return idx;
}
}