kyv542 @ 2023-12-31 23:50:04
n,m=map(int,input().split())
n1=input().split(' ')
m1=input().split(' ')
i=0
j=len(n1)-1
k1=0
ans=''
for k in m1:
k=int(k)
while i<=j:
m=(i+j)//2
if k<int(n1[m]):
j=m-1
elif k>=int(n1[m]):
i=m+1
while int(n1[j])==k and n1[j]==n1[j-1]:
j=j-1
if int(n1[j])==k:
ans=ans+str(j+1)
else:
ans+='-1'
j=len(n1)-1
i=0
print(ans)
while i!=len(ans):
if ans[i]!='-':
print(int(ans[i]),end=' ')
i+=1
elif ans[i]=='-':
print(int(ans[i:i+2]),end=' ')
i=i+2
by Zemu_Ooo @ 2024-01-01 00:05:57
@kyv542 首先我大概看了下题,写不了那么长(
其次,你的初始化有些问题,你在循环外初始化了
而且,在找到元素或确定元素不存在后直接输出结果即可,没必要写那么冗长(
我给你修改了一下,这一版很精简。
n, m = map(int, input().split())
n1 = list(map(int, input().split()))
m1 = list(map(int, input().split()))
for k in m1:
i, j = 0, len(n1) - 1
pos = -1 # 初始化位置为-1
while i <= j:
mid = (i + j) // 2
if n1[mid] < k:
i = mid + 1
else:
j = mid - 1
if n1[mid] == k:
pos = mid # 找到元素,更新位置
# 如果找到了,输出第一次出现的位置
print(pos + 1 if pos != -1 else -1, end=' ')
by kyv542 @ 2024-01-08 14:16:31
谢谢大佬
by kyv542 @ 2024-01-08 14:17:36
先前去高考了来不及看