Number Range (medium)
We'll cover the following
Problem Statement #
Given an array of numbers sorted in ascending order, find the range of a given number ‘key’. The range of the ‘key’ will be the first and last position of the ‘key’ in the array.
Write a function to return the range of the ‘key’. If the ‘key’ is not present return [-1, -1].
Example 1:
Input: [4, 6, 6, 6, 9], key = 6
Output: [1, 3]
Example 2:
Input: [1, 3, 8, 10, 15], key = 10
Output: [3, 3]
Example 3:
Input: [1, 3, 8, 10, 15], key = 12
Output: [-1, -1]
Try it yourself #
Try solving this question here:
Solution #
The problem follows the Binary Search pattern. Since Binary Search helps us find a number in a sorted array efficiently, we can use a modified version of the Binary Search to find the first and the last position of a number.
We can use a similar approach as discussed in Order-agnostic Binary Search. We will try to search for the ‘key’ in the given array; if the ‘key’ is found (i.e. key == arr[middle
) we have two options:
- When trying to find the first position of the ‘key’, we can update
end = middle - 1
to see if the key is present beforemiddle
. - When trying to find the last position of the ‘key’, we can update
start = middle + 1
to see if the key is present aftermiddle
.
In both cases, we will keep track of the last position where we found the ‘key’. These positions will be the required range.
Code #
Here is what our algorithm will look like: