刷题笔记 day4

力扣 611 有效三角形的个数

首先需要知道如何判断 三个数是否能构成三角形。

假如 存在三个数 a < b < c,如果要构成三角形,需要满足:

a+b > c ; a + c > b ; b + c > a ; 任意两个数大于第三个数就可构成三角形。

其实不难发现,如果三个数 按照从大到小排序的话 , 只需满足 a+b > c 即可。

因此第一步首先对给定数组进行排序。

其次在固定最大的数作为一条边,再用双指针 left 指向第一个数 , right 指向固定的最大的数的前一个数。 当 nums[left] + nums[right] > 固定的最大数 , 将right指针右移 ;否则将指针 left 左移。

直至固定的最大数 是数组第三个数结束位置。(解题思路)

那么该怎么统计 有效三角形个数呢?

cpp 复制代码
class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        //先给数组排序
        sort(nums.begin(),nums.end());
        int c = nums.size()-1;
        int count = 0; // 记录有效三角形的个数
        while(c>=2)
        {
            int left = 0, right = c-1;
            while(left < right)
            {
                if(nums[left] +nums[right] > nums[c])
                {
                    count += (right - left);
                    --right;
                }else{
                    ++left;
                }
            }
            --c;
        }
        return count;
    }
};
相关推荐
北顾笙9808 小时前
day43-数据结构力扣
数据结构·算法·leetcode
D_FW8 小时前
数据结构第八章:排序
数据结构
没文化的阿浩8 小时前
【数据结构】排序(4)——归并排序&计数排序
数据结构·算法·排序算法
悲伤小伞8 小时前
LeetCode 热题 100_5-11. 盛最多水的容器
算法·leetcode·职场和发展
多加点辣也没关系8 小时前
数据结构与算法|第十八章:动态规划(上)— 基础篇
数据结构·算法·动态规划
Rabitebla8 小时前
从零实现 C++ List:带头循环双向链表的每一个细节
数据结构·c++·算法·leetcode·链表·list
西梅汁8 小时前
C++ 桥接模式(结构型)
笔记
即将进化成人机8 小时前
乡治通——议题审核、议程和日志管理
windows·笔记
Allen_LVyingbo8 小时前
面向医疗群体智能的协同诊疗与群体决策支持系统(下)
开发语言·数据结构·windows·python·动态规划
sheeta19989 小时前
LeetCode 每日一题笔记 日期:2026.05.09 题目:1914. 循环轮转矩阵
笔记·leetcode·矩阵