当前位置: 首页 > news >正文

双指针(5)——有效三角形个数

题目:

这道题我们首先可能会想到暴力解法,三个for循环然后进行check()。时间复杂度肯定是不允许的。

同时,验证可以组成三角形的条件是任意两边之和大于第三边,这就意味着我们每组要进行三次比较。但也有捷径——只需比较一次即可。但需要条件,让这三个数的组合按从小到大进行排列(a≤b≤c),然后我们只需验证a+b是否大于c即可。因此第一步,我们要把数组进行排序(sort)。

然后我们接下来的思路与双指针(4)的原理有点类似:

我们先计算arr[left]+arr[right](1+9=10,不构成),如果满足a+b≤c,那么left和right的中间任何一个数和left组合都不能满足三角形,所以此时我们就可以把所有数与left的组合都忽略(不用计算了)即,让left++,这是一次流程。反之如果大于c,那么此次流程中的所有数与right结合都满足要求,则有效三角形个数为right-left,然后让right--进行下一次流程,直到left与right相遇。

注意:以上整个流程都是在与10比较,当二者相遇为一个循环,循环结束后,我们要让二者与9(往前一个)比较。直到走到第三个为止。统计每次循环的有效数并求和。

int Solution(vector<int>& nums)
{sort(nums.begin(),nums.end());int ret=0, n=nums.size();for(int i=n-1;i>=2;i--){int left=0,right=i-1;while(left<right){if(nums[left]+nums[right]>nums[i]){ret+=right-left;right--;}else  left++;}}return ret;}

相关文章:

  • 头皮理疗预约小程序开发实战指南
  • 大模型开发学习笔记
  • Java 自旋锁:实现机制与优化策略
  • 【Bootstrap V4系列】学习入门教程之 表格(Tables)和画像(Figure)
  • 动态思维——AI与思维模型【91】
  • java 进阶 1.0
  • 详解SLAM中的李群和李代数(上)
  • 【学习笔记】机器学习(Machine Learning) | 第五章(2)| 分类与逻辑回归
  • 2025-2026 XCPC
  • C语言 指针(3)
  • Arduino按键开关编程详解
  • TS 安装
  • 二叉搜索树的判断(双指针解决)
  • redis持久化-RDB
  • 提示词版本化管理:AI开发中被忽视的关键环节
  • 数字智慧方案6197丨智慧用电一体化服务运营解决方案(34页PPT)(文末有下载方式)
  • Linux 常用命令合集
  • 我的日记杂文
  • 截图软件、画图软件、左右分屏插件、快捷键
  • 【大模型面试每日一题】Day 6:分布式训练中 loss 出现 NaN,可能原因及排查方法?
  • 国铁集团:全国铁路旅客发送量连续3天同比增幅超10%
  • 五一假期多地政府食堂对外开放:部分机关食堂饭菜“秒没”
  • 莫名的硝烟|“我们最好记住1931年9月18日这个日子”
  • 狄威已任国铁集团副总经理
  • 神十九飞船已撤离空间站,计划于今日中午返回东风着陆场
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标