medium Search in Rotated Array
Problem Statement
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.
Note: You need to solve the problem in
Example 1:
Input: [10, 15, 1, 3, 8], key = 15
Output: 1
Explanation: '15' is present in the array at index '1'.
Example 2:
Input: [4, 5, 7, 9, 10, -1, 2], key = 10
Output: 4
Explanation: '10' is present in the array at index '4'.
Constraints:
1 <= arr.length <= 5000- -104 <= arr[i] <= 104
- All values of nums are unique.
- arr is an ascending array that is possibly rotated.
- -104 <= key <= 104
Try it yourself
Try solving this question here:
✅ Solution Search in Rotated Array
Problem Statement
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.
Note: You need to solve the problem in
Example 1:
Input: [10, 15, 1, 3, 8], key = 15
Output: 1
Explanation: '15' is present in the array at index '1'.
Example 2:
Input: [4, 5, 7, 9, 10, -1, 2], key = 10
Output: 4
Explanation: '10' is present in the array at index '4'.
Constraints:
1 <= arr.length <= 5000- -104 <= arr[i] <= 104
- All values of nums are unique.
- arr is an ascending array that is possibly rotated.
- -104 <= key <= 104
Solution
The problem follows the Binary Search pattern. We can use a similar approach as discussed in Order-agnostic Binary Search and modify it similar to Search Bitonic Array to search for the ‘key’ in the rotated array.
After calculating the middle, we can compare the numbers at indices start and middle. This will give us two options:
- If
arr[start] <= arr[middle], the numbers fromstarttomiddleare sorted in ascending order. - Else, the numbers from
middle+1to 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:
- By comparing the ‘key’ with the numbers at index
startandmiddlewe can easily find out if the ‘key’ lies between indicesstartandmiddle; if it does, we can skip the second part =>end = middle -1. - Else, we can skip the first part =>
start = middle + 1.
Let’s visually see this with the above-mentioned Example-2:

Since there are no duplicates in the given array, it is always easy to skip one part of the array in each iteration. However, if there are duplicates, it is not always possible to know which part is sorted. We will look into this case in the ‘Similar Problems’ section.
Code
Here is what our algorithm will look like:
class Solution {
public int search(int[] arr, int key) {
int start = 0, end = arr.length - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (arr[mid] == key) return mid;
if (arr[start] <= arr[mid]) { // left side is sorted in ascending order
if (key >= arr[start] && key < arr[mid]) {
end = mid - 1;
} else { //key > arr[mid]
start = mid + 1;
}
} else { // right side is sorted in ascending order
if (key > arr[mid] && key <= arr[end]) {
start = mid + 1;
} else {
end = mid - 1;
}
}
}
// we are not able to find the element in the given array
return -1;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.search(new int[] { 10, 15, 1, 3, 8 }, 15));
System.out.println(sol.search(new int[] { 4, 5, 7, 9, 10, -1, 2 }, 10));
}
}
Time Complexity
Since we are reducing the search range by half at every step, this means that the time complexity of our algorithm will be O(logN) where ‘N’ is the total elements in the given array.
Space Complexity
The algorithm runs in constant space O(1).
Similar Problems
Since we are reducing the search range by half at every step, this means that the time complexity of our algorithm will be O(logN) where ‘N’ is the total elements in the given array.
Problem 1
How do we search in a sorted and rotated array that also has duplicates?
The code above will fail in the following example!
Example 1:
Input: [3, 7, 3, 3, 3], key = 7
Output: 1
Explanation: '7' is present in the array at index '1'.

Solution
The only problematic scenario is when the numbers at indices start, middle, and end are the same, as in this case, we can’t decide which part of the array is sorted. In such a case, the best we can do is to skip one number from both ends: start = start + 1 & end = end - 1
Code
The code is quite similar to the above solution:
class Solution {
public int search(int[] arr, int key) {
int start = 0, end = arr.length - 1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (arr[mid] == key) return mid;
// the only difference from the previous solution,
// if numbers at indexes start, mid, and end are same, we can't choose a side
// the best we can do, is to skip one number from both ends as key != arr[mid]
if ((arr[start] == arr[mid]) && (arr[end] == arr[mid])) {
++start;
--end;
} else if (arr[start] <= arr[mid]) { // left side is sorted in ascending order
if (key >= arr[start] && key < arr[mid]) {
end = mid - 1;
} else { //key > arr[mid]
start = mid + 1;
}
} else { // right side is sorted in ascending order
if (key > arr[mid] && key <= arr[end]) {
start = mid + 1;
} else {
end = mid - 1;
}
}
}
// we are not able to find the element in the given array
return -1;
}
public static void main(String[] args) {
Solution sol = new Solution();
System.out.println(sol.search(new int[] { 3, 7, 3, 3, 3 }, 7));
}
}
Time Complexity
This algorithm will run most of the times in O(logN) . However, since we only skip two numbers in case of duplicates instead of half of the numbers, the worst case time complexity will become O(N).
Space Complexity
The algorithm runs in constant space O(1).
🤖 Don't fully get this? Learn it with Claude
Stuck on Search in Rotated Array? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.
Progressively stronger hints — you still solve it.
I'm working on the problem **Search in Rotated Array** (DSA). Give me a HINT LADDER: start with the tiniest nudge, then wait. Only reveal the next, stronger hint when I ask. Do NOT show the full solution unless I type 'show solution'. Keep me doing the thinking. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
See the technique, not just code.
Explain the optimal approach to **Search in Rotated Array** with a VISUAL walkthrough: trace it on a small concrete example using ASCII art / a step-by-step diagram, narrate what changes each step, then give time & space complexity with a one-line derivation. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Catch bugs, edge cases, sub-optimality.
I'll paste my solution to **Search in Rotated Array**. Review it for correctness, missed edge cases, and time/space complexity, then coach me toward the optimal — don't just rewrite it. Ask me to paste my code now. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Lock in recognition with look-alikes.
Give me 2 problems that use the SAME underlying pattern as **Search in Rotated Array**. For each, let me attempt first, then review my answer and name the trigger signal that reveals the pattern. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.