class Solution: def searchRange(self, nums, target): def binary_search(nums, target, left, right): while left <= right: mid = (left + right) // 2 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return -1 def find_leftmost(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] >= target: right = mid - 1 else: left = mid + 1 return left def find_rightmost(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] <= target: left = mid + 1 else: right = mid - 1 return right left_idx = find_leftmost(nums, target) right_idx = find_rightmost(nums, target) if left_idx <= right_idx: return [left_idx, right_idx] else: return [-1, -1] give a detailed but 2-3 sentence analysis of the time and complexity and space complexity of the algorithm in big O notation
class Solution:
def searchRange(self, nums, target):
def binary_search(nums, target, left, right):
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
def find_leftmost(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] >= target:
right = mid - 1
else:
left = mid + 1
return left
def find_rightmost(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] <= target:
left = mid + 1
else:
right = mid - 1
return right
left_idx = find_leftmost(nums, target)
right_idx = find_rightmost(nums, target)
if left_idx <= right_idx:
return [left_idx, right_idx]
else:
return [-1, -1]
give a detailed but 2-3 sentence analysis of the time and complexity and space complexity of the algorithm in big O notation
Unlock instant AI solutions
Tap the button
to generate a solution