Given a rotated sorted array and a target element, find the index of the target element in the array. If the target is not found, return -1. The array is initially sorted in ascending order and then rotated at an unknown pivot.
Input/Output Examples
plaintext
Example 1:
Input:
arr = [4, 5, 6, 7, 0, 1, 2]
target = 0
Output: 4
Explanation: The element 0 is found at index 4.
Example 2:
Input:
arr = [4, 5, 6, 7, 0, 1, 2]
target = 3
Output: -1
Explanation: The element 3 is not found in the array, so the output is -1.
Example 3:
Input:
arr = [1]
target = 1
Output: 0
Explanation: The element 1 is found at index 0.
Approach to search an element in a rotated sorted array
- Binary Search with Modifications:
- Since the array is sorted but rotated, a modified binary search can be used to find the target efficiently.
 
- Determine Sorted Half:
- For each element at mid, determine which half (left or right) is sorted by comparingarr[left]andarr[mid].
- If the left half is sorted, check if the target lies within this half; if not, search the right half.
- If the right half is sorted, check if the target lies within this half; if not, search the left half.
 
- For each element at 
- Adjust Search Range:
- Based on which half is sorted and whether the target lies within the sorted half, adjust the leftandrightpointers to narrow down the search range.
 
- Based on which half is sorted and whether the target lies within the sorted half, adjust the 
C++ Program to search an element in a rotated sorted array
cpp
#include <iostream>
#include <vector>
using namespace std;
// Function to search for an element in a rotated sorted array
int searchInRotatedArray(vector<int>& arr, int target) {
    int left = 0, right = arr.size() - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        // Check if mid is the target element
        if (arr[mid] == target) {
            return mid;
        }
        // Determine which half is sorted
        if (arr[left] <= arr[mid]) { // Left half is sorted
            if (arr[left] <= target && target < arr[mid]) {
                right = mid - 1; // Target in left half
            } else {
                left = mid + 1;  // Target in right half
            }
        } else { // Right half is sorted
            if (arr[mid] < target && target <= arr[right]) {
                left = mid + 1; // Target in right half
            } else {
                right = mid - 1; // Target in left half
            }
        }
    }
    return -1; // Target not found
}
int main() {
    vector<int> arr = {4, 5, 6, 7, 0, 1, 2};
    int target = 0;
    int result = searchInRotatedArray(arr, target);
    cout << "Index of target element: " << result << endl;
    return 0;
}
Java Program to search an element in a rotated sorted array
java
public class SearchInRotatedArray {
    // Function to search for an element in a rotated sorted array
    public static int searchInRotatedArray(int[] arr, int target) {
        int left = 0, right = arr.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            // Check if mid is the target element
            if (arr[mid] == target) {
                return mid;
            }
            // Determine which half is sorted
            if (arr[left] <= arr[mid]) { // Left half is sorted
                if (arr[left] <= target && target < arr[mid]) {
                    right = mid - 1; // Target in left half
                } else {
                    left = mid + 1;  // Target in right half
                }
            } else { // Right half is sorted
                if (arr[mid] < target && target <= arr[right]) {
                    left = mid + 1; // Target in right half
                } else {
                    right = mid - 1; // Target in left half
                }
            }
        }
        return -1; // Target not found
    }
    public static void main(String[] args) {
        int[] arr = {4, 5, 6, 7, 0, 1, 2};
        int target = 0;
        int result = searchInRotatedArray(arr, target);
        System.out.println("Index of target element: " + result);
    }
}
Python Program to search an element in a rotated sorted array
python
# Function to search for an element in a rotated sorted array
def search_in_rotated_array(arr, target):
    left, right = 0, len(arr) - 1
    while left <= right:
        mid = left + (right - left) // 2
        # Check if mid is the target element
        if arr[mid] == target:
            return mid
        # Determine which half is sorted
        if arr[left] <= arr[mid]: # Left half is sorted
            if arr[left] <= target < arr[mid]:
                right = mid - 1 # Target in left half
            else:
                left = mid + 1  # Target in right half
        else: # Right half is sorted
            if arr[mid] < target <= arr[right]:
                left = mid + 1 # Target in right half
            else:
                right = mid - 1 # Target in left half
    return -1 # Target not found
# Example usage
if __name__ == "__main__":
    arr = [4, 5, 6, 7, 0, 1, 2]
    target = 0
    result = search_in_rotated_array(arr, target)
    print("Index of target element:", result)
Time Complexity
- O(log n): The algorithm performs a binary search, which divides the search space in half at each step, resulting in logarithmic time complexity.
Space Complexity
- O(1): The algorithm uses a constant amount of extra space for variables left,right, andmid.