Leetcode每日刷题之611.有效三角形的个数(C++)

1. 思路解析

根据题意我们可知,我们需要在指定数组中找出任意三个数并判断是否可以组成一个三角形,即任意两数之和大于第三个数,任意两数之差小于第三个数,如果有数组元素相同的数组,由于取出的元素只是数值相同而实际在原数组下标不同,所以可以看做两个三角形

2. 算法原理

这里补充一下关于判断三角形的知识,那就是两个较小数之和大于最大数则是一个三角形,这样就只用判断一次即可。这里的思路是首先对目标数组进行排序,然后固定最大的数,在剩下数字的区间内,将头尾设置两个指针,判断相加是否大于最大值,若大于则此时满足三角形有 right - left 个,右指针左移随后继续判断,反之左指针右移,最终返回满足三角形的个数即可

3. 代码展示

cpp 复制代码
class Solution {
public:
    int triangleNumber(vector<int>& nums) 
    {
        //1.优化数组,进行排序
        sort(nums.begin(),nums.end());
        int sum = 0;
        int n = nums.size();
        for(int i = n - 1;i >= 2;i--)
        { 
        //2.使用双指针解决问题
            int left = 0;
            int right = i - 1;
            while(left < right)
            {
                if(nums[left] + nums[right] > nums[i])
                {
                    sum += right - left;
                    right--;
                }
                else
                {
                    left++;
                }
            }
        }
        return sum;
    }
};
相关推荐
ThetaarSofVenice12 分钟前
垃圾收集相关算法Test
java·jvm·算法
小陈phd22 分钟前
langchain从入门到精通(二十八)——RAG优化策略(六)集成多种检索器算法实现混合检索及问题转换总结
算法
是小王同学啊~23 分钟前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain
薰衣草23331 小时前
一天两道力扣(1)
算法·leetcode·职场和发展
一粒沙白猫1 小时前
Java综合练习04
java·开发语言·算法
爱coding的橙子1 小时前
每日算法刷题Day41 6.28:leetcode前缀和2道题,用时1h20min(要加快)
算法·leetcode·职场和发展
一只鱼^_2 小时前
基础算法合集-图论
数据结构·算法·深度优先·图论·广度优先·宽度优先·图搜索算法
2301_803554522 小时前
c++中的绑定器
开发语言·c++·算法
人生在勤,不索何获-白大侠2 小时前
day15——Java常用API(二):常见算法、正则表达式与异常处理详解
java·算法·正则表达式