思路:先从小到大排序,然后从后往前依次判断是否有两个数满足三角形的组成规则,这里判断可以用双指针
以下是代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e5+10;
ll num[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>num[i];
}
sort(num+1,num+n+1);
for(int i=n;i>=1;i--)
{
int l=1,r=i-1;
while(l<r)
{
if(num[l]+num[r]>num[i]&&num[r]-num[l]<num[i])
{
cout<<"YES";
return 0;
}
if(num[l]+num[r]<=num[i]) l++;
else if(num[r]-num[l]>=num[i]) r--;
}
}
cout<<"NO";
return 0;
}