📖 Scenario: Imagine you have a list of numbers that was originally sorted from smallest to largest. But then, someone rotated it at some point, so the order is mixed. You want to find if a certain number is in this rotated list.
🎯 Goal: You will write a program to find the position of a given number in a rotated sorted array using an efficient search method.
📋 What You'll Learn
Create a vector called nums with the exact values: {4, 5, 6, 7, 0, 1, 2}
Create an integer variable called target and set it to 0
Write a function called search that takes nums and target and returns the index of target in nums or -1 if not found
Print the result of calling search(nums, target)
💡 Why This Matters
🌍 Real World
Rotated sorted arrays appear in systems where data is shifted or rotated, such as circular buffers or rotated logs. Efficient search helps quickly find needed information.
💼 Career
Understanding how to search in rotated sorted arrays is useful for software engineers working on performance-critical applications, embedded systems, or interview coding challenges.
Progress0 / 4 steps
1
Create the rotated sorted array
Create a vector called nums with the exact values {4, 5, 6, 7, 0, 1, 2}.
DSA C++
Hint
Use std::vector<int> nums = {4, 5, 6, 7, 0, 1, 2}; to create the vector.
2
Set the target number to search
Create an integer variable called target and set it to 0.
DSA C++
Hint
Use int target = 0; to create the target variable.
3
Write the search function for rotated sorted array
Write a function called search that takes const std::vector<int>& nums and int target and returns the index of target in nums or -1 if not found. Use a binary search approach adapted for rotated arrays.
DSA C++
Hint
Use binary search with checks on which half is sorted to decide where to search next.
4
Print the search result
Print the result of calling search(nums, target).
DSA C++
Hint
Use std::cout << search(nums, target) << std::endl; to print the result.
Practice
(1/5)
1. What is the main challenge when searching for an element in a rotated sorted array compared to a normal sorted array?
easy
A. The array is not fully sorted, so normal binary search cannot be directly applied.
B. The array contains duplicate elements which confuse the search.
C. The array size is unknown, so we cannot set search boundaries.
D. The array elements are all negative numbers.
Solution
Step 1: Understand normal binary search assumption
Binary search works efficiently on fully sorted arrays by comparing mid element to target.
Step 2: Identify the problem with rotated arrays
Rotated sorted arrays are sorted but shifted, so the order is broken at the rotation point, making direct binary search invalid.
Final Answer:
The array is not fully sorted, so normal binary search cannot be directly applied. -> Option A
Quick Check:
Rotated array breaks sorted order = need modified search [OK]
Hint: Look for the rotation point to adjust binary search [OK]
Common Mistakes:
Assuming array is fully sorted and applying normal binary search
Ignoring rotation and searching linearly
Confusing duplicates with rotation
2. Which of the following is the correct syntax to start a binary search loop for a rotated sorted array in C++?
easy
A. if (arr[mid] == target)
B. for (int i = 0; i < n; i++)
C. while (start <= end)
D. do { ... } while (start < end)
Solution
Step 1: Identify loop type for binary search
Binary search uses a while loop with condition start <= end to narrow search range.
Step 2: Check options for correct loop syntax
while (start <= end) uses while (start <= end), which is standard for binary search loops.
Final Answer:
while (start <= end) -> Option C
Quick Check:
Binary search loop uses while (start <= end) [OK]
Hint: Binary search loops use while (start <= end) [OK]
Common Mistakes:
Using for loop instead of while for binary search
Using incorrect loop condition like start < end
Confusing if statement with loop
3. What will be the output of the following C++ code snippet?
int arr[] = {4,5,6,7,0,1,2};
int target = 0;
int start = 0, end = 6;
int result = -1;
while (start <= end) {
int mid = start + (end - start) / 2;
if (arr[mid] == target) {
result = mid;
break;
}
if (arr[start] <= arr[mid]) {
if (target >= arr[start] && target < arr[mid])
end = mid - 1;
else
start = mid + 1;
} else {
if (target > arr[mid] && target <= arr[end])
start = mid + 1;
else
end = mid - 1;
}
}
std::cout << result << std::endl;
medium
A. 3
B. 0
C. -1
D. 4
Solution
Step 1: Trace initial variables and mid calculation
Step 2: Check which half is sorted and adjust search
arr[start]=4 <= arr[mid]=7, left half sorted. Target 0 not in [4,7), so search right half: start=mid+1=4.
Step 3: Next iteration mid=5 (element 1)
arr[mid]=1 != target. arr[start]=0 <= arr[mid]=1, left half sorted. Target 0 in [0,1), so end=mid-1=4.
Step 4: Next iteration mid=4 (element 0)
arr[mid]=0 == target, result=4, break loop.
Final Answer:
4 -> Option D
Quick Check:
Target 0 found at index 4 [OK]
Hint: Check sorted half and adjust start/end accordingly [OK]
Common Mistakes:
Not updating start/end correctly based on sorted half
Confusing indices and returning wrong index
Missing break after finding target
4. Identify the bug in the following code snippet for searching in a rotated sorted array:
int search(int arr[], int n, int target) {
int start = 0, end = n - 1;
while (start < end) {
int mid = start + (end - start) / 2;
if (arr[mid] == target) return mid;
if (arr[start] <= arr[mid]) {
if (target >= arr[start] && target < arr[mid])
end = mid - 1;
else
start = mid + 1;
} else {
if (target > arr[mid] && target <= arr[end])
start = mid + 1;
else
end = mid - 1;
}
}
return -1;
}
medium
A. The mid calculation is incorrect and can cause overflow.
B. The loop condition should be while (start <= end) instead of while (start < end).
C. The target comparison should use > instead of >=.
D. The function does not handle empty arrays.
Solution
Step 1: Analyze loop condition impact
Using while (start < end) misses checking when start == end, possibly skipping last element.
Step 2: Correct loop condition for complete search
Changing to while (start <= end) ensures all elements are checked, including when start equals end.
Final Answer:
The loop condition should be while (start <= end) instead of while (start < end). -> Option B
Quick Check:
Loop must cover start == end to check last element [OK]
Hint: Use while (start <= end) for full binary search coverage [OK]
Common Mistakes:
Using while (start < end) and missing last element
Ignoring overflow in mid calculation (not in this code though)
Incorrect comparison operators
5. Given a rotated sorted array arr = {15, 18, 2, 3, 6, 12}, write a C++ function to find the index of the minimum element. What is the output of your function?
hard
A. 2
B. 0
C. 5
D. 3
Solution
Step 1: Understand the minimum element in rotated array
The minimum element is the rotation point where order breaks. Here, 2 at index 2 is smallest.
Step 2: Use binary search to find minimum
Check mid and compare with end to decide which half contains minimum. Eventually, index 2 is found.
Final Answer:
2 -> Option A
Quick Check:
Minimum element 2 is at index 2 [OK]
Hint: Compare mid element with end to find rotation point [OK]
Common Mistakes:
Returning first element index instead of minimum
Confusing maximum with minimum element
Not handling rotation correctly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.