#!/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 - 1 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)