2026 is coming… :sob:
TODO: Clean up the conditions. I feel my current solution is messy and can be improved (maybe by consolidating if conditions)
I checked others’ solution https://github.com/garunitule/coding_practice/pull/40. I feel, my solution is acceptable (of course depending on the conversation with interviewers) under specific time limit.
class Solution:
def findMin(self, nums: list[int]) -> int:
# [1, 2, 3, 4, 5] -> right = middle
# [2, 3, 4, 5, 1] -> left = middle, same as below
# [3, 4, 5, 1, 2] -> left = middle, because arr[-1] < arr[0]
# [4, 5, 1, 2, 3] -> left = middle
# [5, 1, 2, 3, 4] -> right = middle
left = 0
right = len(nums) - 1
while left < right:
if right - left == 1:
return min(nums[left], nums[right])
middle = (left + right) // 2
if nums[left] < nums[right]:
if nums[left] < nums[middle] < nums[right]:
right = middle
else:
left = middle
else:
if nums[middle] < min(nums[left], nums[right]):
right = middle
else:
left = middle
assert left == right
return nums[left]I feel tired and frustrated. Work is hard, and also there have been unaddressed desires.
TODO: