#AG103. 【程序填空题】1.3算法简介程序填空
【程序填空题】1.3算法简介程序填空
def process_data(data):
n = len(data)
for i in range(n):
print("Processing:", data[i])
low, high = 0, n-1
while low <= high:
mid = (low + high) // 2
if data[mid] == "target":
return mid
elif data[mid] < "target":
low = mid + 1
else:
high = mid - 1
return -1
1.分析上面函数的时间复杂度,用大O表示法表示为:{{ input(1) }}。
def find_first_occurrence(arr, target):
low, high = 0, len(arr)-1
result = -1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
result = mid
______ # 继续向左搜索
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return result
2.补充完善程序,使得在有序数组 [1, 2, 2, 2, 3, 4] 中,找到目标值 2 第一次出现的索引。请在划线处补全二分查找的边界调整逻辑的代码。{{ input(2) }}。
def safe_binary_search(arr, target):
low, high = 0, len(arr)-1
while low <= high:
mid = (low + high) // 2 # 可能溢出
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
3.以上代码在极大数组(长度超过10⁹)时可能导致整数溢出。请修改 mid 的计算方式以修复问题。{{ input(3) }}。