给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例 1:
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
/*
先定下最大边的值,然后寻找另外两条边
*/
class Solution {
public:
int triangleNumber(vector<int>& nums) {
sort(nums.begin(), nums.end());
int ans = 0;
int len = nums.size();
for(int i = len - 1; i >= 2; i--)
{
int l = 0, r = i - 1;
while(l < r)
{
if(nums[l] + nums[r] > nums[i])
{
ans += (r - l);//找到对于nums[r]这个数符合条件的最小边了
r--;//找对于nums[r--]满足的第三条边的个数
}
else
{
l++;
}
}
}
return ans;
}
};