Leet code 611 有效三角形个数

本文介绍了一种简单而有效的方法,利用双指针技巧解决给定整数数组中能组成三角形的组合数量问题。通过先排序数组,然后设置左右指针,判断每对数是否满足三角形条件,统计满足条件的组合数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单有效的思路:双指针解法

比如给出一个nums={4,3,2,4,5,6,8,10}

先将nums排序 -> { 2, 3, 4, 4, 5, 6, 8, 10}

for(int i=nums.size()-1;i>=2;i--)  i的下标为当前最大值的下标

左指针定义0  右指针定义目前最大值下标的左一位

再让左右下标进入while循环

三角形有个很重要的定义 如果较小的两边之和大于第三边那么该三角形一定成立

比如进入第一次while循环

left指向 2  right指向 8  2+8=10 三角形不成立 那么 left++

left指向3  right指向 8   3+8>10 成立 ,那么 right和left之间所有必然成立  count+=right-left

right-- 继续看成立否   直到 left==right 退出循环

代码如下

class Solution {
public:
    int triangleNumber(vector<int>& nums) 
    {
        int count=0;
       sort(nums.begin(),nums.end());
       for(int i=nums.size()-1;i>=2;i--)
       {
           int right=i-1;
           int left=0;
           while(right>left)
           {
               if(nums[left]+nums[right]>nums[i])
               {
                   int sum=right-left;
                   count+=sum;
                   right--;
               }
               else
               {
                   left++;
               }
           }
       }
       return count;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值