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]
还是用两头逼近的老办法,处理特殊情况的部分有点难看,不过程序运行的结果很不错,就不参考大神做法了。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> ans = {-1,-1};
int len = nums.size();
if(len < 1) return ans;
if(len == 1){
if(nums[0] == target)
{
ans[0] = 0;
ans[1] = 0;
return ans;
}
else return ans;
}
int left = 0;
int right = nums.size() - 1;
if(target < nums[left]) return ans;
if(target > nums[right]) return ans;
bool l = false;
bool r = false;
while(left < right)
{
if(nums[left] < target) left++;
if(nums[right] > target) right--;
if(nums[left] == target){
ans[0] = left;
l = true;
}
if(nums[right] == target){
ans[1] = right;
r = true;
}
if(l&&r) break;
}
return ans;
}
};