题目描述:
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]
中文理解:
给定一个递增的序列和一个目标值,如果序列中有目标值,则返回该值的下标开始和结束值。
解题思路:
首先找出该target值在数组中的存在下标,使用二分法查找,时间复杂度是log(n),返回该下标,然后以该下标为起止值,左右遍历,如果数组值和target相同继续遍历,否则退出,即可得到该值存在于数组中的起始下标。
代码(java):
class Solution {
public int[] searchRange(int[] nums, int target) {
int []res={-1,-1};
int result=seach(nums,target);
if(result==-1)return res;
else{
int start=result-1,end=result+1;
while(start>=0){
if(nums[start]==target)start--;
else break;
}
while(end<nums.length){
if(nums[end]==target)end++;
else break;
}
res[0]=++start;
res[1]=--end;
}
return res;
}
public int seach(int[]nums,int target){
int start=0,end=nums.length-1,mid=0;
int res=-1;
while(start<=end){
mid=(start+end)/2;
if(nums[mid]>target){
end=mid-1;
}
else if(nums[mid]<target){
start=mid+1;
}
else if(nums[mid]==target){
res=mid;
break;
}
}
return res;
}
}