Find First and Last Position of Element in Sorted Array
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]
Solution
To search left&right range with binaryAG ;When mid equals targert,keep searching the left area in case of leaving THE accurate left range;So is the right;
class Solution {
public int[] searchRange(int[] nums, int target) {
return new int[]{
binarySearch(nums, target, true),
binarySearch(nums, target, false)
};
}
private int binarySearch(int[] nums, int target, boolean isLeft) {
int low = 0;
int high = nums.length - 1;
int index = -1;
while (low <= high) {
int mid = (low + high) / 2;
if (nums[mid] < target)
low = mid + 1;
else if (nums[mid] > target)
high = mid - 1;
else {
index = mid;
if (isLeft)
high = mid - 1;
else
low = mid + 1;
}
}
return index;
}
}