跪求,帮我康康*.*蹲大佬

P2249 【深基13.例1】查找

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 首先我大概看了下题,写不了那么长(

其次,你的初始化有些问题,你在循环外初始化了 ij,但在每次查询后只重置了 j

而且,在找到元素或确定元素不存在后直接输出结果即可,没必要写那么冗长(

我给你修改了一下,这一版很精简。

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

先前去高考了来不及看


|