Skip to content

Instantly share code, notes, and snippets.

@jovianlin
Created December 6, 2018 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jovianlin/dceece42ac44d9be1b2eed87ef1faf58 to your computer and use it in GitHub Desktop.
Save jovianlin/dceece42ac44d9be1b2eed87ef1faf58 to your computer and use it in GitHub Desktop.
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
start, end = 0, len(nums)-1
while start <= end:
mid = (start+end)//2
if target == nums[mid]:
return mid
# IF LEFT IS IN ORDER...
if nums[start] <= nums[mid]:
# AND TARGET LIES WITHIN THIS LEFT CHUNK...
if nums[start] <= target <= nums[mid]: end = mid-1
# TARGET LIES WITHIN THE RIGHT CHUNK.
else: start = mid+1
# ELSE, THINGS ARE NOT IN ORDER
else:
# IF TARGET LIES BETWEEN MID AND END, TARGET IN RIGHT CHUNK
if nums[mid] <= target <= nums[end]:
start = mid+1
# ELSE IT IS IN LEFT CHUNK
else:
end = mid-1
return -1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment