给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例 1:
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
tips : 先排序,从后往前遍历,用双指针法。(只要最小的两条边大于最大的边即可构成三角形)
class Solution {
public:
int triangleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int count=0;
int pre_pos,post_pos;
for (int i = nums.size()-1; i >=0; i--)
{
pre_pos=0;
post_pos=i-1;
while(pre_pos<post_pos) {
if(nums[pre_pos]+nums[post_pos]>nums[i]) {
count+=post_pos-pre_pos;
post_pos--;
} else {
pre_pos++;
}
}
}
return count;
}
};