P2249 【深基13.例1】查找
时间:2023.10.15
题目地址:【深基13.例1】查找
题目相似:LeetCode里的一个考察二分的题目,想学习或巩固二分的可以看看这两道题,解法相似。在排序数组中查找元素的第一个和最后一个位置
题目分析
这题目数据量这么大,就是为了考察二分。一直二分找到这个元素的最先出现的下标,可以用一个参数记录。
代码
n, m = map(int, input().split())
li = [int(i) for i in input().split()]
nums = [int(i) for i in input().split()]
def findNum(num):
left = 0
right = n-1
first = -2 # 记录下标
while left <= right:
mid = (left + right) // 2
if li[mid] > num:
right = mid - 1
elif li[mid] < num:
left = mid + 1
else: # li[mid] == num
first = mid
right = mid - 1
return first+1
for i in range(m):
print(findNum(nums[i]), end=' ')