📚Description:
数列S中有n个整数,判断S中是否存在两个数A、B,使之和等于X。
⏳Input:
第一行为T,输入包括T组测试数据。
每组数据第一行包括两个数字n和X,第二行有n个整数,表示数列S,(1<n<=100000)
🔑Output:
对于每组测试数据,输出占一行,如果存在,输出"YES",否则输出"NO"。
👨🏫 Sample Input:
2
5 3
1 3 4 3 5
5 5
1 2 4 3 5
💡Sample Output:
NO
YES
🙋思路
这题如果无脑for的话我觉得可能会超时
所以换一个思路
就是提前设置一个数组b
用来存放输入数字A与目标数字X的差
即X-A的值
这里我们提前把数组b的值设为0
这样当我们每次输入一个A时
我们只要判断他的差b[X-A]的值是否存在
这样就可以边数入边判断
会显得很简洁
AC Code
#include <stdio.h>
int a[1000000];
int b[1000000]; //用于标记是否存在这个数
int main(){
int t;
scanf("%d",&t);
int n,x;
while(t--){
int flag=0;
scanf("%d%d",&n,&x);
for(int i=0;i<1000000;i++)
b[i] = 0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]<=x && b[x-a[i]]!=0)
flag = 1;
b[a[i]]++;
}
if(flag == 1)
printf("YES\n");
else
printf("NO\n");
}
}