Description
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]
Problem URL
Solution
给一个已经排序的数组,找到target在数组中出现的下标范围。
We could use two binary search to find the left position and right position of target in the array. First binary search approaching from left to right, update left’s value first. If no target in array return res directly. Then for right part, approaching from right ot left, and make a biase to right in the calculation of mid.
Code
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] res = {-1, -1};
if (nums.length == 0){
return res;
}
int left = 0, right = nums.length - 1;
while (left < right){
int mid = (left + right) / 2;
if (nums[mid] < target){
left = mid + 1;
}
else{
right = mid;
}
}
if (nums[left] != target){
return res;
}
res[0] = left;
right = nums.length - 1;
while (left < right){
int mid = (left + right) / 2 + 1;
if (nums[mid] > target){
right = mid - 1;
}
else{
left = mid;
}
}
res[1] = right;
return res;
}
}
Time Complexity: O(logn)
Space Complexity: O(1)