页码:56 • 行数:13 • 印次 3 ans = ans + arr2[i:] 这里有问题,如果arr2[i]已经插入到列表中时,这里就会多加一次,例如将arr2改为[2,5,8,9]就会出错,或者将arr2改为[2,5,8,11,12]也会出错。修改方案: i = 0 j = 0 ans = arr1.copy() while j < len(arr1) and i < len(arr2): if arr2[i] <= arr1[j]: ans.insert(j + i, arr2[i]) i += 1 else: j += 1 else: ans = ans + arr2[i:] print(ans) print(i) print(j)
arr=[1.2.3.4.5.6.7.8.9.10]
for i in range(len(10))
23页这个len函数绝对错了
二分查找的最终代码
二分查找 (数组长度越长越能提现性能)
“””
二分查找需要两个指针,指向数组第一个元素叫头指针,指向数组最后一个元素叫尾指针,
查找范围,包括头指针指向的元素但不包括尾指针指向的元素。
“””
numbers = [200, 20, 30, 40, 50, 60, 700, 710, 800, 900]
head, tail = 0, len(numbers)
查找8的下标
search = 710
ans = 0
查找范围大于1时才会进入while
while tail - head > 1:
mid = (head + tail) // 2
if search < numbers[mid]:
else:
if search == numbers[head]:
ans = mid
pass
else:
ans = -1
pass
print(ans)
么这错多
第四章计算岛的大小的算法描述是没问题的,但是给出的程序是有问题。因为描述中说如果一个搜索点周围不是海水就是已经遍历的陆地时,返回上一搜索点。但是程序里是没有体现的。这会造成错误,比如下面这个岛就算不对。
0 1 1 ////////////////////////////////////////////////////0 2 1
1 1 1 /////////////////////////////////////////////////// 2 2 1
1 1 1 如果按照书上的算法,最后得到 2 2 1 。因为到了0下面那个二时,程序就停止了。但是,事实上,应该逐一返回,这样才能遍历剩下的1.
页码:56 • 行数:13 • 印次 3
ans = ans + arr2[i:]
这里有问题,如果arr2[i]已经插入到列表中时,这里就会多加一次,例如将arr2改为[2,5,8,9]就会出错,或者将arr2改为[2,5,8,11,12]也会出错。修改方案:
i = 0
j = 0
ans = arr1.copy()
while j < len(arr1) and i < len(arr2):
if arr2[i] <= arr1[j]:
ans.insert(j + i, arr2[i])
i += 1
else:
j += 1
else:
ans = ans + arr2[i:]
print(ans)
print(i)
print(j)