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) {
int[] result = { -1, -1 };
int left = 0;
int right = nums.length - 1;
int findIndex = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) {
findIndex = mid;
break;
} else if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid + 1;
}
}
if (findIndex == -1) {
return result;
}
int t = findIndex;
while (t < nums.length - 1 && nums[t] == nums[t + 1]) {
t++;
}
result[1] = t;
t = findIndex;
while (t > 0 && nums[t] == nums[t - 1]) {
t--;
}
result[0] = t;
return result;
}
}