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;
    }
};
相关推荐
柠檬少少开发25 分钟前
图像拼接算法及实现(一)
人工智能·算法·计算机视觉
weixin_486681141 小时前
C++系列-STL容器中统计算法count, count_if
开发语言·c++·算法
一道秘制的小菜1 小时前
C++第七节课 运算符重载
服务器·开发语言·c++·学习·算法
咕噜咕嘟嘟嘟3 小时前
343. 整数拆分
数据结构·算法
WenGyyyL3 小时前
力扣最热一百题——二叉树的直径
java·c++·算法·二叉树·深度优先
sdlkjaljafdg3 小时前
vector<bool>性能测试
开发语言·c++·算法
muyierfly3 小时前
36.贪心算法3
算法·贪心算法
huanxiangcoco4 小时前
55. 跳跃游戏
python·leetcode
__AtYou__4 小时前
Golang | Leetcode Golang题解之第413题等差数列划分
leetcode·golang·题解
Kenneth風车4 小时前
【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·分类·数据分析·回归