Problem
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]
Solution
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] res = {-1, -1};
if (nums == null || nums.length == 0) return res;
int start = 0, end = nums.length-1;
while (nums[start] < nums[end]) { //don`t be equal
int mid = start + (end-start)/2;
if (nums[mid] < target) {
start = mid+1;
} else if (nums[mid] > target) {
end = mid-1;
} else { //once nums[mid] == target:
if (nums[start] != nums[mid]) start++; //move start to lower bound (first position)
else end--; //move end to higher bound (last position)
}
}
if (nums[start] == target && nums[end] == target) {
res[0] = start;
res[1] = end;
}
return res;
}
}