题目描述
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例 1:
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
注意:
数组长度不超过1000。
数组里整数的范围为 [0, 1000]。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-triangle-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
class Solution {
public:
int triangleNumber(vector<int>& nums) {
int ans = 0,len = nums.size();
if(len < 3) return ans;
sort(nums.begin(),nums.end());
for(int i=0;i<len-1;++i){
int tmp = nums[i];
if(tmp == 0) continue;
for(int j=i+1;j<len;++j){
int tsum = tmp+nums[j];
int thr = lower_bound(nums.begin(),nums.end(),tsum) - nums.begin();
ans += thr-j-1;
}
}
return ans;
}
};