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;
    }
};
相关推荐
my rainy days2 小时前
C++:友元
开发语言·c++·算法
haoly19892 小时前
数据结构和算法篇-归并排序的两个视角-迭代和递归
数据结构·算法·归并排序
微笑尅乐2 小时前
中点为根——力扣108.讲有序数组转换为二叉搜索树
算法·leetcode·职场和发展
im_AMBER3 小时前
算法笔记 05
笔记·算法·哈希算法
夏鹏今天学习了吗3 小时前
【LeetCode热题100(46/100)】从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
吃着火锅x唱着歌3 小时前
LeetCode 2389.和有限的最长子序列
算法·leetcode·职场和发展
嶔某3 小时前
二叉树的前中后序遍历(迭代)
算法
007php0073 小时前
百度面试题解析:微服务架构、Dubbo、Redis及其一致性问题(一)
redis·百度·docker·微服务·容器·职场和发展·架构
WWZZ20253 小时前
快速上手大模型:机器学习2(一元线性回归、代价函数、梯度下降法)
人工智能·算法·机器学习·计算机视觉·机器人·大模型·slam
孤狼灬笑3 小时前
深度学习经典分类(算法分析与案例)
rnn·深度学习·算法·cnn·生成模型·fnn