题目描述:
Given a sorted array of integers, 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].
题目含义:
给定一个有序的数组,让我们在该数组中寻找指定元素,并且返回该元素存在的范围。
求解思路:
由于数组有序,因此可以使用两次二分法来寻找元素的首个出现位置和最后出现的位置。
具体实现:
public class Solution {
public int[] searchRange(int[] nums, int target) {
if (nums.length == 0 ) {
return new int[]{-1 , -1 };
}
int start, end , mid;
int[] bound = new int[2 ];
start = 0 ;
end = nums.length - 1 ;
while (start + 1 < end ) {
mid = start + (end - start)/2 ;
if (nums[mid] == target) {
end = mid;
} else if (nums[mid] < target) {
start = mid;
} else {
end = mid;
}
}
if (nums[start] == target) {
bound[0 ] = start;
} else if (nums[end ] == target) {
bound[0 ] = end ;
} else {
bound[0 ] = bound[1 ] = -1 ;
return bound;
}
start = 0 ;
end = nums.length - 1 ;
while (start + 1 < end ) {
mid = start + (end - start)/2 ;
if (nums[mid] == target) {
start = mid;
} else if (nums[mid] < target) {
start = mid;
} else {
end = mid;
}
}
if (nums[end ] == target) {
bound[1 ] = end ;
} else if (nums[start] == target) {
bound[1 ] = start;
} else {
bound[0 ] = bound[1 ] = -1 ;
return bound;
}
return bound;
}
}