from typing import List
class Solution:
def search(self, nums: List[int], target: int) -> int:
n = len(nums)
low = 0
high = n - 1
while low <= high:
mid = (low + high) // 2
if nums[mid] == target:
return mid
else:
current = nums[mid]
# Right part sorted
if current <= nums[n - 1]:
if target <= nums[n - 1]:
if current < target:
low = mid + 1
else:
high = mid - 1
else:
high = mid - 1
# Left part sorted
else:
if target >= nums[0]:
if current < target:
low = mid + 1
else:
high = mid - 1
else:
low = mid + 1
return -1
ZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QKCmNsYXNzIFNvbHV0aW9uOgogICAgZGVmIHNlYXJjaChzZWxmLCBudW1zOiBMaXN0W2ludF0sIHRhcmdldDogaW50KSAtPiBpbnQ6CiAgICAgICAgbiA9IGxlbihudW1zKQogICAgICAgIGxvdyA9IDAKICAgICAgICBoaWdoID0gbiAtIDEKCiAgICAgICAgd2hpbGUgbG93IDw9IGhpZ2g6CiAgICAgICAgICAgIG1pZCA9IChsb3cgKyBoaWdoKSAvLyAyCgogICAgICAgICAgICBpZiBudW1zW21pZF0gPT0gdGFyZ2V0OgogICAgICAgICAgICAgICAgcmV0dXJuIG1pZAogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgY3VycmVudCA9IG51bXNbbWlkXQoKICAgICAgICAgICAgICAgICMgUmlnaHQgcGFydCBzb3J0ZWQKICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQgPD0gbnVtc1tuIC0gMV06CiAgICAgICAgICAgICAgICAgICAgaWYgdGFyZ2V0IDw9IG51bXNbbiAtIDFdOgogICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50IDwgdGFyZ2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDEKICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICBoaWdoID0gbWlkIC0gMQoKICAgICAgICAgICAgICAgICMgTGVmdCBwYXJ0IHNvcnRlZAogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXQgPj0gbnVtc1swXToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudCA8IHRhcmdldDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdyA9IG1pZCArIDEKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggPSBtaWQgLSAxCiAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgbG93ID0gbWlkICsgMQoKICAgICAgICByZXR1cm4gLTE=