Medium
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
object Solution {
def searchRange(nums: Array[Int], target: Int): Array[Int] = {
val ans = new Array[Int](2)
ans(0) = helper(nums, target, equals = false)
ans(1) = helper(nums, target, equals = true)
ans
}
private def helper(nums: Array[Int], target: Int, equals: Boolean): Int = {
var l = 0
var r = nums.length - 1
var result = -1
while (l <= r) {
val mid = l + (r - l) / 2
if (nums(mid) == target) {
result = mid
}
if (nums(mid) < target || (nums(mid) == target && equals)) {
l = mid + 1
} else {
r = mid - 1
}
}
result
}
}