题目
给定一个升序的整数数组 nums ,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O ( log n )级别。
如果数组中不存在目标值,返回 [-1, -1]
提示:
例1:
- 输入:nums = [5,7,7,8,8,10], target = 8
- 输出:[3,4]
例2:
- 输入:nums = [5,7,7,8,8,10], target = 6
- 输出:[-1,-1]
JavaScript实现
var searchRange = function(nums,target) {
var idx = [];
nums.forEach(function(item,index,array) {
if (item === target)
idx.push(index);
});
if (!idx.length)
return [-1,-1];
return [idx[0],idx[idx.length - 1 ]];
};
Java实现
public class Solution1{
public int[] searchRange(int[] nums,int target) {
int[] range = new int[2];
range[0] = -1;
range[1] = -1;
if(nums == null || nums.length == 0) {
return range;
}
int start = 0;
int end = nums.length - 1;
while(start + 1 < end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
int left = mid;
while(left - 1 >= 0 && nums[left] == nums[left - 1]) {
left--;
}
range[0] = left;
int right = mid;
while(right + 1 < nums.length && nums[right] == nums[right + 1]) {
right++;
}
range[1]=right;
break;
}else if(nums[mid] < target) {
start = mid;
}else{
end = mid;
}
}
if(nums[start] == target) {
range[0] = start;
while(start + 1 < nums.length && nums[start] == nums[start + 1]) {
start++;
}
range[1] = start;
}else if(nums[end] == target) {
range[1] = end;
while(end - 1 >= 0 && nums[end] == nums[end - 1]) {
end--;
}
range[0] = end;
}
return range;
}
}