master-algorithms-py/searching/bs_rotated_array.py
2023-07-31 15:39:08 -07:00

47 lines
1.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# author: bt3gl
def search(nums):
# 1. find the smallest element in the rotate array
# "left" will be used as index later
left, right = 0, len(nums)
while left < right:
mid = (left + right) // 2
if nums[mid] > nums[-1]:
left = mid + 1
else:
right = mid
# 2. write a binary search
def bs(left, right, target):
while left < right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid
else:
left = mid + 1
return -1
# 3. run for both sides
response = bs(0, left, target)
if response != -1:
return response
else:
return bs(left, len(nums), target)