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

69 三角形计数(Triangle Count)

文章目录

    • 1 题目
    • 2 解决方案
      • 2.1 思路
      • 2.2 时间复杂度
      • 2.3 空间复杂度
    • 3 源码

1 题目

题目:三角形计数(Triangle Count)
描述:给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?

lintcode题号——382,难度——medium

样例1:

输入: [3, 4, 6, 7] 输出: 3 解释: 可以组成的是 (3, 4, 6), (3, 6, 7), (4, 6, 7)

样例2:

输入: [4, 4, 4, 4] 输出: 4 解释:任何三个数都可以构成三角形,所以答案为 C(3, 4) = 4

2 解决方案

2.1 思路

首先三条边在满足a<=b<=c的前提下,只要满足a+b>c即可构成三角形,这样我们先对数组进行排序,使得按照位置取出来的三个数能够满足a<=b<=c,将c通过循环进行遍历固定,再在c位置之前的子数组中找到和的值大于c的两个数即可。

2.2 时间复杂度

排序的时间复杂度O(n * log n),外层循环的时间复杂度为O(n),在子数组找两数和大于目标值的数的时间复杂度为O(n),总时间复杂度为O(n^2)。

2.3 空间复杂度

空间复杂度为O(1)。

3 源码

细节:

  1. 形成三角形的三边条件为(a<b<c && a+b>c)即可。
  2. 先进行排序,让有序取出的abc满足a<b<c,再固定c去判断a+b>c(下标遍历固定c,再two sum之前的区间)
  3. 若a+b比c大,则b不动,a右移的所有a+b都大于c,加入结果之后,b左移进行下一轮
  4. 若a+b比c小,则需要a左移,进行下一轮

C++版本:

/** * @param S: A list of integers * @return: An integer */ int triangleCount(vector<int> &S) { // write your code here int result = 0; if (S.empty()) { return result; } // 先排序,确保三个数的大小 a<=b<=c sort(S.begin(), S.end()); // 固定c的位置 for (int i = 2; i < S.size(); i++) { int target = S.at(i); int temp = twoSumGreater(S, 0, i - 1, target); // 找到子数组中令两数和大于目标值的结果个数 result += temp; } return result; } // left指向a,right指向b,找到令 a+b>c 的结果 int twoSumGreater(vector<int> & S, int left, int right, int target) { int result = 0; while (left < right) { if (S.at(left) + S.at(right) <= target) { left++; } else if(S.at(left) + S.at(right) > target) { result = result + (right - left); // 直接将left左移的所有结果加入 right--; } } return result; }
http://www.jsqmd.com/news/1393884/

相关文章:

  • 从Claude Code泄露源码看AI编程助手架构设计
  • 刑事附带民事案件怎么找合适律师 赔偿主张与代理服务要点全面梳理
  • lazarus 4.8及之前的版本QT5中文输入多字词组时只输入前2个中文
  • Agent 的搜索引擎:Agentic Resource Discovery 规范,以及它解决不了的信任问题
  • 2026广州企业建站平台哪个好?中小企业如何快速搭建官网?
  • 2026年|苏州太仓市GEO服务商代理加盟怎么选?国内靠谱GEO服务商推荐指南 - 小随科技
  • 别再盲目学Python!网安新人学编程的正确姿势,不学废、不白学
  • 2026骨码智元70+各领域领军科学家资源如何构建数据壁垒?从顶层设计到批量落地 - 生活动态圈
  • 2026年中企赴泰投资找哪家律所:天知澜与四家同行的横向比较 - 品牌品鉴馆
  • Meta智能眼镜争议剖析:从技术架构看AI可穿戴设备的隐私与伦理挑战
  • [ARC149B] Two LIS Sum
  • NLP 多任务模型灰度,要拆开看任务与样本切片
  • 手机官网案例效果展示
  • hudi系列-流式增量查询
  • 10分钟用ZeroClaw构建可记忆的Telegram AI助手:从Rust环境到SQLite持久化
  • 深圳市风航拓展国际货运代理有限公司:聚焦南非专线,构建中非跨境物流全链路服务体系 - 品牌品鉴馆
  • Git 忽略文件大小写
  • 禹州恒达滨河府业主一致推荐装修公司 - 猜不透的vv
  • 那些不响的,才是《天道》真正想说的
  • 2026年五大赛道加盟横评:用数据拆解成功率关键点 - 生活动态圈
  • drawsvg核心功能详解:从基础图形到复杂动画的完整实现
  • 嵌入式工程师成长之路(3)——PCB设计
  • Krea-2 Turbo AI绘图模型上手指南:三个痛点一次讲透
  • REFramework 启动崩溃快速自救指南:RE2 重制版非光追版兼容性问题完整解法
  • 为什么大佬都不建议新人一上来就打CTF?彻底讲透CTF与就业的区别
  • ESXi7.0升级8.0后存储vMotion失败 incompatible‑CPU排错完整指南
  • 2026年镇江润州区国内GEO服务商代理加盟靠谱推荐:选择标准及避坑指南 - 小随科技
  • 随机数,才是最强的读心术
  • SH9持续同调拓扑正则性与无导数奇点检测:拓扑表示对应等价条件与Navier-Stokes奇异性的拓扑刻画
  • 还在手动刷激活?一款KMS激活工具让Windows和Office自动续命180天