给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例 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;
}
};
本文介绍了一种算法,用于统计给定非负整数数组中能构成三角形边长的有效三元组数量。通过示例展示,如输入[2,2,3,4],输出为3。文章提供了具体的实现思路:先对数组进行排序,然后采用双指针法从后向前遍历,判断是否满足构成三角形的条件。
2362

被折叠的 条评论
为什么被折叠?



