# 33. Search in Rotated Sorted Array

• Time: $O(\log n)$
• Space: $O(1)$
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class Solution { public: int search(vector& nums, int target) { int l = 0; int r = nums.size() - 1; while (l <= r) { const int m = (l + r) / 2; if (nums[m] == target) return m; if (nums[l] <= nums[m]) { // nums[l..m] are sorted if (nums[l] <= target && target < nums[m]) r = m - 1; else l = m + 1; } else { // nums[m..n - 1] are sorted if (nums[m] < target && target <= nums[r]) l = m + 1; else r = m - 1; } } return -1; } }; 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class Solution { public int search(int[] nums, int target) { int l = 0; int r = nums.length - 1; while (l <= r) { final int m = (l + r) / 2; if (nums[m] == target) return m; if (nums[l] <= nums[m]) { // nums[l..m] are sorted if (nums[l] <= target && target < nums[m]) r = m - 1; else l = m + 1; } else { // nums[m..n - 1] are sorted if (nums[m] < target && target <= nums[r]) l = m + 1; else r = m - 1; } } return -1; } } 
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Solution: def search(self, nums: List[int], target: int) -> int: l = 0 r = len(nums) - 1 while l <= r: m = (l + r) // 2 if nums[m] == target: return m if nums[l] <= nums[m]: # nums[l..m] are sorted if nums[l] <= target < nums[m]: r = m - 1 else: l = m + 1 else: # nums[m..n - 1] are sorted if nums[m] < target <= nums[r]: l = m + 1 else: r = m - 1 return -1