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,8,10],target = 8
Output: [3,4]
Example 2:
Input: nums = [5,target = 6
Output: [-1,-1]
题目大意:
在给定的排序数组中寻找目标数出现的重复区间,如果没有这个数,则返回{-1,,1}
解法:
根据题目的时间复杂度采用二分查找进行搜索。
C++
class Solution { public: void searchRangeCore(vector<int>nums,int start,int end,int target,vector<int>&res){ if(end<start) return; if(nums[start]>target||nums[end]<target) return; int mid=(end-start)/2+start; if(nums[mid]==target){ res[0]=(res[0]==-1?mid:min(res[0],mid)); res[1]=max(res[1],mid); } searchRangeCore(nums,start,mid-1,target,res); searchRangeCore(nums,mid+1,end,res); } vector<int> searchRange(vector<int>& nums,int target) { vector<int>res={-1,-1}; searchRangeCore(nums,nums.size()-1,res); return res; } };