给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。
第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
我们直接暴力肯定不行,找规律先找四个数其和为0 eg: -6 3 1 2 我们可以先发现任意两个的和为其他两个的相反数,这样枚举两个就行了,但是还是很麻烦,可以先对其排序,枚举前两个较小的
用二分(也不算二分其实更像是双指针)来判断后两个数,一经查找直接输出
#include<iostream>
#include<algorithm>
using namespace std;
const int N= 1010;
int a[N];
bool solve(int l,int r,int sum)
{
while(l<r)
{
if(a[l]+a[r]==sum) return true;
if(sum<a[l]+a[r]) r--;
else l++;
}
return false;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int sum=-(a[i]+a[j]);
if(solve(j+1,n-1,sum))
{
cout<<"Yes";
return 0;
}
}
}
cout<<"No";
}