给定一个包含非负整数的数组 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
代码如下:
//排序+双指针
class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(),nums.end());//先将数组进行排序int n=nums.size();int count=0;//记录有效三角形的个数for(int i=n-1;i>=2;i--){int left=0;int right=i-1;while(left<right){if(nums[left]+nums[right]>nums[i])//如果满足两边之和大于第三边{count+=right-left;//说明nums[l+1] +nums[r]>nums[i],...,nums[r-1] +nums[r]>nums[i]满足的条件的有r-l种,right--;//right左移进入下一轮}else//如果nums[left]+nums[right]<=nums[i]{left++;//left右移进入下一轮}}}return count;//返回最终结果}
};