其他分享
首页 > 其他分享> > 力扣 611. 有效三角形的个数 双指针

力扣 611. 有效三角形的个数 双指针

作者:互联网

611. 有效三角形的个数

给定一个包含非负整数的数组 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

题解

三角形三边a,b,c, 先将数组排序,这样a,b,c就是从小到大,满足 a+c>b b+c>c ,只需要验证 a+b>c,如果满足就可以组成三角形,

查看代码

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int cnt=0;
        for(int i=nums.size()-1;i>1;i--){
            int l=0,r=i-1;
            while(l<=r){
                if((nums[l]+nums[r])>nums[i]){//满足三角形条件
               
                    cnt+=r-l;
                    r--;//b=r探索完了,往左边探索              
                }
                else if((nums[l]+nums[r])<=nums[i]){//前两个太小了,要加大
                    l++;
                }
            }
        }
        return cnt;
    }
};

标签:cnt,nums,int,611,个数,示例,力扣,三角形,指针
来源: https://www.cnblogs.com/fudanxi/p/16093338.html