611. 有效三角形的个数
问题描述:
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例1:
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
思路:
- 先进行排序
- 暴力枚举前两个边,再二分查找第三个边,得出在确定的前两个边的情况下,第三个边可以选几个。
- 累加后得出返回结果即可
Java代码
/**
* @Description: 力扣611题题解
* @return: 返回结果
* @Author: Mr.Gao
* @Date: 2021/8/4
*/
public int triangleNumber(int[] nums) {
int n = nums.length;
if(n<=2){
return 0;
}
int re=0;
int left = 0;
int right = 0;
Arrays.sort(nums);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n-1; j++) {
left=j+1;
right=n;
while (left < right) {
int mid = left+(right-left)/2;
if(nums[mid]>=nums[i]+nums[j]){
right=mid;
}else{
left=mid+1;
}
}
re+=(left-1-j);
}
}
return re;
}