第1关:不重复序列二分搜索
编写函数,函数功能是查找已排序的不重复数据列表A中的指定元素x,找到给出该数在列表中的下标,找不到输出-1。
#Student start
def findx(A,x):
high,low=len(A)-1,0
while high>=low:
mid=(high+low)//2
if A[mid]==x:
return mid
elif A[mid]>x:
high=mid-1
else:
low=mid+1
return -1
#Student End
Y = input().split() #输入格式[1,2,3,4,5] 4
A = eval(Y[0])
x = eval(Y[1])
ind = findx(A,x)
print(ind)
第2关:重复序列的二分搜索
编写函数,函数功能是查找已排序的重复数据列表A中的指定元素x,找到给出该数在列表中第一次出现的下标,找不到输出-1。
#Student start
def findx(A,x):
high,low=len(A)-1,0
while high>=low:
mid=(high+low)//2
if A[mid]==x:
p=mid
while p>0 and A[p-1]==x:
p-=1
return p
elif A[mid]>x:
high=mid-1
else:
low=mid+1
return -1
#Student End
Y = input().split()
A = eval(Y[0])
x = eval(Y[1])
A.sort()
ind = findx(A,x)
print(ind)
第3关:重复序列二分搜索2
编写函数,函数功能是查找已排序的重复数据列表A中的指定元素x,找到给出该数在列表中最后一次出现的下标,找不到输出-1。
#Student start
def findx(A,x):
high,low=len(A)-1,0
while high>=low:
mid=(high+low)//2
if A[mid]==x:
p=mid
while p<len(A)-1 and A[p+1]==x:
p+=1
return p
elif A[mid]>x:
high=mid-1
else:
low=mid+1
return -1
#Student End
Y = input().split()
A = eval(Y[0])
x = eval(Y[1])
A.sort()
ind = findx(A,x)
print(ind)
第4关:重复序列二分搜索3
编写函数,函数功能是在已排序的重复数据列表A中,查找比指定的元素x小的最大的数,给出该数在列表中最后一次出现的下标,找不到输出-1。
#Student Start
def findx(A,x):
high,low=len(A)-1,0
while high>=low:
mid=(high+low)//2
if A[mid]==x:
p=mid
while p>0 and A[p-1]==x:
p-=1
return p
elif A[mid]>x:
high=mid-1
else:
low=mid+1
return -1
#Student End
Y = input().split()
A = eval(Y[0])
x = eval(Y[1])
A.sort()
ind = findx(A,x)
if ind==-1:
print('%d不在列表中'%x)
elif ind==0:
print('%d已经是列表中最小的数'%x)
else:
print('比%d小的最大的数是%d最后出现的下标位置为%d'%(x,A[ind-1],ind-1))
求求三连啦。。。