Find Min
LeetCode Problem
# https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/
"""
Observation : Rotated array : there will always be a left sorted subarray and and right sorted sub array no matter how you rotate it
[1,2,3,4,5] = [3,4,5,1,2] : [3,4,5] and [1,2]
# search for middle value ; if middle value lies in left half then look at right
if middle value lies in right half then look at left
keep updating min as we keep seeing mid
"""
def findMin(nums):
ans = nums[0] # for now
low, high = 0, len(nums) - 1
while low <= high:
# if array sorted : ans = min(ans, nums[left]) : left here means the first element (Smallest)
if nums[low] < nums[high]:
ans = min(ans, nums[low])
break
mid = (low + high) // 2
ans = min(ans, nums[mid])
# figure out if mid is in left subarray or right subarray: if left subarray : look at right
if (
nums[mid] >= nums[low]
): # 5 > 3 that means its in left subarray : look at right
low = mid + 1
else:
high = mid - 1
return ans
def main():
nums = [3, 4, 5, 1, 2]
print(findMin(nums))
main()