【双指针_有效三角形的个数_C++】

题目解析

有效三角形的个数

判断三角形:任意两边之和大于第三边

需要重复计算:

知识点

1、需要判断三次:

2、只需要判断一次

复制代码
已经知道这三个数的大小(先进行排序)
只需要判断
较小的两个数之和 是否 大于最大的数
就可以得出是否可以构成三角形

算法原理

1、先对整个数组进行排序

2、再去固定最大的数

3、在最大的数的左边区间内使用双指针 算法进行统计符合条件的三元组的个数

编写代码

cpp 复制代码
class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        // 1、排序(从小到大)
        sort(nums.begin(),nums.end());
        // 2、去固定最大的数
        int i = 0;
        int n = nums.size();
        int sum = 0;

        for(i=n-1;i>=2;i--){
        // 3、right每次是从i-1开始(left从0开始)
            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;
    }
};
相关推荐
草莓熊Lotso6 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
历程里程碑6 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
在路上看风景13 小时前
19. 成员初始化列表和初始化对象
c++
zmzb010313 小时前
C++课后习题训练记录Day98
开发语言·c++
念风零壹14 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
孞㐑¥15 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
MZ_ZXD00116 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
A星空12317 小时前
一、Linux嵌入式的I2C驱动开发
linux·c++·驱动开发·i2c
凡人叶枫17 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
会叫的恐龙18 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串