leetcode_gym/_code/arrays/findMinInSortedArray.py

41 lines
870 B
Python
Raw Permalink Normal View History

arr = [4,5,6,7,2,3]
def findMin(nums):
# 1-elem array
if len(nums)==1:
return nums[0]
left = 0
right = len(nums)-1
# this condition means arr is already sorted, so just return first element
if nums[right] > nums[0]:
return nums[0]
while right>=left:
mid = left + (right-left) // 2
# min found: case 1
if nums[mid] > nums[mid+1]: # 3 4 5 1 2 where 5 is mid
return nums[mid+1]
# min found: case 2
if nums[mid-1] > nums[mid]: # 4 5 1 2 3 where 1 is mid
return nums[mid]
### min not found cases below
# mid is greater than first elem so ignore left half
if nums[mid] > nums[0]:
left = mid+1
# mid is less than first elem, ignore right half
else:
right = mid-1
print(findMin(arr))