Description:
给定一个递增正整数数组和一个要查找的整数target,用二分搜索法查找到给定元素target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。PS:如若存在多个target,返回target在序列中第一次出现的位置。
Input:
首先输入一个正整数N,代表接下来将输入N组测试数据;
然后接下来将分别输入每组数组nums作为测试数据;
再输入每组待查找的元素target。
Output:
分别输出每组数据查找结果。
# Filename: Midsort.py
n = int(input()) # 输入序列数
a = [] # 储存各序列
length = [] # 各序列长度
for i in range(0, n):
a = a + [list(map(int, input().split(',')))]
length.append(len(a[i]))
target = [] # 待查找的元素
for i in range(0, n):
target.append(int(input()))
for i in range(n):
head = 0
end = length[i]+1
mid = (head + end) //2
found = 0
while head != mid:
if a[i][mid-1]>target[i] or a[i][mid-2] == target[i]:
end = mid
mid = (head + end) //2
continue
if a[i][mid-1]<target[i]:
head = mid
mid = (head + end) //2
continue
if a[i][mid-1] == target[i]:
found = 1
print(mid-1)
break
if found == 0:
print(-1)
Bugs you may write:
1.尝试下1,2,3,4,4,4,4,4这样的序列,如果搜索4的话,你返回的是3吗?
2.试试搜索一个序列两端的数据,你搜得到吗?