当前位置: 首页 > 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;}

http://www.dtcms.com/a/169272.html

相关文章:

  • 头皮理疗预约小程序开发实战指南
  • 大模型开发学习笔记
  • 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,可能原因及排查方法?
  • 实战交易策略 篇二十二:情绪流龙头交易策略
  • 学习笔记:Qlib 量化投资平台框架 — OTHER COMPONENTS/FEATURES/TOPICS
  • 仿腾讯会议——主界面设计创建房间加入房间客户端实现
  • Linux管道识
  • Qt 中基于 QTableView + QSqlTableModel 的分页搜索与数据管理实现
  • 双向链表详解
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません (~た・~ない)ほうがいいです
  • 兰亭妙微分享:B 端设计如何实现体验跃迁
  • 依赖倒置原则(DIP)
  • DeepSeek-R1模型蒸馏