双指针专题1:有效三角形的个数
描述
给定一个正整数n,输入一行包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
输入描述
第一行输入一个正整数n
第二行输入n个nums[i]
输出描述
输出其中可以组成三角形三条边的三元组个数。
解释一个样例:
4
2 2 3 4
第一组:2 2 3 4
第二组:2 2 3 4
第三组:2 2 3 4
一共三组。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
int a[1010];
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);//将各条边的长度排序
int cnt=0;
for(int i=n;i>1;i--){
int l=1,r=i-1;
while(l<r){
if(a[l]+a[r]>a[i]){//如果最短的一条边和r组合都能组成三角形,那么从l到r-1的边都可以组成三角形
cnt+=r-l;
r--;//试探极值
}
else{
l++;
}
}
}
cout<<cnt;
return 0;
}