题目描述
给定一个包含非负整数的数组 nums
,返回其中可以组成三角形三条边的三元组个数。
示例 1:
输入: nums = [2,2,3,4]
输出: 3
解释:有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
示例 2:
输入: nums = [4,2,3,4]
输出: 4
提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
代码
class Solution { public: int triangleNumber(vector<int>& nums) { int n=nums.size();//数组大小 int num=0;//统计三角形个数 sort(nums.begin(),nums.end());//排序 for(int i=n-1;i>0;i--) { int left=0; int right=i-1; while(left<=right) { //排好序后只要比他小的两个数,相加大于大的那个数,就可以组成三角形 if(nums[left]+nums[right]>nums[i]) { num+=right-left; right--; } else { left++; } } } return num; } };