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; } };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。