Problem Statement:
Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value.
If target is not found in the array, return [-1, -1].
You must write an algorithm with O(log n) runtime complexity.
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]
Example 3:
Input: nums = [], target = 0
Output: [-1,-1]
Constraints:
- 0 <= nums.length <= 105
- -109 <= nums[i] <= 109
- nums is a non-decreasing array.
- -109 <= target <= 109
Solution:
Algorithm:
- Find the target value in the array.
- If the target value is found,then find the first and last position of the target value.
- If the target value is not found,return [-1,-1].
- Return the result.
Code:
public class Solution {
public int[] searchRange(int[] nums,int target){
int[] result = new int[2];
result[0] = -1;
result[1] = -1;
int left = 0;
int right = nums.length - 1;
int mid = 0;
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] == target){
result[0] = mid;
result[1] = mid;
break;
}
else if(nums[mid] < target){
left = mid + 1;
}
else{
right = mid - 1;
}
}
if(result[0] == -1){
return result;
}
int i = mid - 1;
while(i >= 0 && nums[i] == target){
result[0] = i;
i--;
}
i = mid + 1;
while(i < nums.length && nums[i] == target){
result[1] = i;
i++;
}
return result;
}
}
Time Complexity:
O(log N)
Space Complexity:
O(1)
Top comments (0)