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;
    }
};
相关推荐
mit6.8248 小时前
bfs|栈
算法
CoderYanger10 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz10 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
夏鹏今天学习了吗10 小时前
【LeetCode热题100(72/100)】前 K 个高频元素
leetcode
稚辉君.MCA_P8_Java10 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
多多*10 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
덕화10 小时前
【面试宝典】线上问题逆向分析1
面试·职场和发展
美团程序员10 小时前
一篇文章教你搞定:”xx 功能如何测试?“常见面试题型!
测试工具·面试·职场和发展·测试用例
.YM.Z11 小时前
【数据结构】:排序(一)
数据结构·算法·排序算法
Chat_zhanggong34511 小时前
K4A8G165WC-BITD产品推荐
人工智能·嵌入式硬件·算法