0% found this document useful (0 votes)
64 views14 pages

Modified Binary Search

The document discusses modified binary search algorithms to handle searching sorted arrays when the sort order is unknown, finding the ceiling and range of a number in a sorted array, and searching a rotated sorted array. It provides examples and solutions for each problem, including using comparisons between start, middle, and end indexes to determine which portion of a rotated array is sorted. Additional practice problems are given on counting rotations, finding floors in sorted arrays, and handling duplicates in rotated arrays.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
64 views14 pages

Modified Binary Search

The document discusses modified binary search algorithms to handle searching sorted arrays when the sort order is unknown, finding the ceiling and range of a number in a sorted array, and searching a rotated sorted array. It provides examples and solutions for each problem, including using comparisons between start, middle, and end indexes to determine which portion of a rotated array is sorted. Additional practice problems are given on counting rotations, finding floors in sorted arrays, and handling duplicates in rotated arrays.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

Modified Binary Search

Atul kumar PK
Backend Engineer @ TakeMe Co., Ltd
Problem 1 : Order agnostic binary search
Given a sorted array of numbers, find if a given number ‘key’ is present in
the array. Though we know that the array is sorted, we don’t know if it’s
sorted in ascending or descending order. You should assume that the array
can have duplicates.

Write a function to return the index of the ‘key’ if it is present in the array,
otherwise return -1.
1. Example
1. Solution
Problem 1 : Ceiling of a Number

Given an array of numbers sorted in an ascending order, find the ceiling of a


given number ‘key’. The ceiling of the ‘key’ will be the smallest element in
the given array greater than or equal to the ‘key’.

Write a function to return the index of the ceiling of the ‘key’. If there isn’t
any ceiling return -1.
Input: [1, 3, 8, 10, 15], key = 12

Output: 4

Explanation: The smallest number greater than or equal to '12' is '15' having index '4'.
2. Example
2. Solution
Problem 3 : Number Range

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].

Input: [4, 6, 6, 6, 9], key = 6

maxIndex = 3

Output: [1, 3]
3. Solution (call 2 times - find max and then find min index) Any optimization?
Problem 4 : Search in rotated array

Given an array of numbers which is sorted in ascending order and also rotated by
some arbitrary number, find if a given ‘key’ is present in it.

Write a function to return the index of the ‘key’ in the rotated array. If the ‘key’ is not
present, return -1. You can assume that the given array does not have any duplicates.
Input: [4, 5, 7, 9, 10, -1, 2], key = 10

Output: 4

Explanation: '10' is present in the array at index '4'.


4. Solution explanation
After calculating the middle, we can compare the numbers at indices start and middle. This will give us two
options:

1. If arr[start] <= arr[middle], the numbers from start to middle are sorted in ascending order.
2. Else, the numbers from middle+1 to end are sorted in ascending order.

Once we know which part of the array is sorted, it is easy to adjust our ranges. For example, if option-1 is true,
we have two choices:

1. By comparing the ‘key’ with the numbers at index start and middle we can easily find out if the ‘key’
lies between indices start and middle; if it does, we can skip the second part => end = middle -1.
2. Else, we can skip the first part => start = middle + 1.
4. Example
4. Solution
Practice problems
1. Count rotation
a. Input: [10, 15, 1, 3, 8]

b. Output: 2

c. Explanation: The array has been rotated 2 times.

2. Rotation count of a sorted and rotated array that has duplicates too?

a. Input: [3, 3, 7, 3]

b. Output: 3

c. Explanation: The array has been rotated 3 times

3. Given an array of numbers sorted in ascending order, find the floor of a given number ‘key’.

a. Input: [1, 3, 8, 10, 15], key = 12

b. Output: 3

c. Explanation : The biggest number smaller than or equal to '12' is '10' having index
'3'.

You might also like