Results
How I fixed certain errors
def search_rotated_array(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
if arr[left] <= arr[mid]: # Left half is sorted
if arr[left] <= target < arr[mid]:
right = mid - 1
else:
left = mid + 1
else: # Right half is sorted
if arr[mid] < target <= arr[right]:
left = mid + 1
else:
right = mid - 1
return -1
def find_first_and_last(arr, target):
def binary_search_first():
left, right = 0, len(arr) - 1
first = -1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
first = mid
right = mid - 1 # Search left part
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return first
def binary_search_last():
left, right = 0, len(arr) - 1
last = -1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
last = mid
left = mid + 1 # Search right part
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return last
first = binary_search_first()
last = binary_search_last()
return (first, last)
def find_smallest_greater_or_equal(arr, target):
left, right = 0, len(arr) - 1
result = -1
while left <= right:
mid = (left + right) // 2
if arr[mid] >= target:
result = arr[mid]
right = mid - 1 # Search left part
else:
left = mid + 1
return result
# Example test cases
print(search_rotated_array([4, 5, 6, 7, 0, 1, 2], 1)) # Output: 5
print(find_first_and_last([1, 2, 2, 2, 3, 4, 5], 2)) # Output: (1, 3)
print(find_smallest_greater_or_equal([1, 3, 5, 7, 9, 11], 8)) # Output: 9
5
(1, 3)
9