H. 找数字
题目描述
给定一个 nn 个数的数组 aa,再给定 mm 次询问,每次询问一个整数 xx 在数组 aa 中是否存在,如果存在,输出 Y,不存在输出 N。
输入
第 11 行是一个整数 nn(5≤n≤10^55≤n≤10
5
);
第 22 行有 nn 个整数,数与数之间用空格隔开;
第 33 行有一个整数mm(5≤m≤10^55≤m≤10
5
);
第 44 行有 mm 个整数,数与数之间用空格隔开;
【以下回答由 GPT 生成】
首先,我们可以使用一个哈希集合来存储数组a中的所有元素。然后,对于每个查询元素x,我们只需要在哈希集合中查找是否存在x即可。
下面是一种可能的解决方案的代码实现:
def check_elements_exist(n, a, m, queries):
# 创建一个空的哈希集合
set_a = set()
# 遍历数组a,将每个元素添加到哈希集合中
for num in a:
set_a.add(num)
# 对于每个查询元素x,判断是否存在于哈希集合中
results = []
for query in queries:
if query in set_a:
results.append("Y")
else:
results.append("N")
return results
# 读取输入
n = int(input())
a = list(map(int, input().split()))
m = int(input())
queries = list(map(int, input().split()))
# 调用函数进行查询
results = check_elements_exist(n, a, m, queries)
# 输出结果
for result in results:
print(result, end=" ")
这个解决方案的时间复杂度是O(n+m),其中n是数组a的长度,m是查询的次数。
希望这个解决方案对你有帮助!如果有任何问题,请随时提问。
输入
5
1 3 2 1 6
5
2 8 1 9 6
输出
Y N Y N Y
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n+1];
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
int k;
cin>>k;
for(int i=1;i<=k;i++){
int x;
cin>>x;
int left=1,right=n;
bool flag=0;
while(left<=right)
{
int mid=(left+right)/2;
if(a[mid]>x)
{
right=mid-1;
}
else if(a[mid]<x)
{
left=mid+1;
}
else
{
flag=1;
break;
}
}
if(flag) cout<<"Y ";
else cout<<"N ";
}
return 0;
}