文章目录

  • 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 hereint result = 0;if (S.empty()){return result;}// 先排序,确保三个数的大小 a<=b<=csort(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;
}

69 三角形计数(Triangle Count)相关推荐

  1. P2807 三角形计数(c++)

    题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入格式 第一行为 ...

  2. Triangle Count算法

    1.传统算法 1.1算法描述 Triangle Count在社交网络分析中是非常有用的.这个三角形是一个三结点的小图,其中结点两两相连.假如,在Facebook上,你认识两个校友,而这两个校友彼此有相 ...

  3. nvGRAPH三角形计数和遍历示例

    nvGRAPH三角形计数和遍历示例 #include " stdlib.h" #include" inttypes.h" #include" stdi ...

  4. R语言在直方图条(柱形)上添加计数(count)或者百分比(percent)标签

    R语言在直方图条(柱形)上添加计数(count)或者百分比(percent)标签 目录

  5. #十二、编写三角形类Triangle,初始化三个属性,分别是三条边的长度,定义一个计算并打印周长的函数 #十三、编写等腰三角形类EWtriangle,继承于三角形类,初始化只用传一个腰长和一个底长,定

    #十二.编写三角形类Triangle,初始化三个属性,分别是三条边的长度,定义一个计算并打印周长的函数 #十三.编写等腰三角形类EWtriangle,继承于三角形类,初始化只用传一个腰长和一个底长,定 ...

  6. 三、12.13.14.15.编写三角形类Triangle

    作业 #12.编写三角形类Triangle,初始化三个属性,分别是三条边的长度,定义一个计算并打印周长的函数class Triangle(object):def __init__ (a,b,c):se ...

  7. 第五章第五十题(对大写字母计数)(count the uppercase letters)

    第五章第五十题(对大写字母计数)(count the uppercase letters) *5.50(对大写字母计数)编写一个程序,提示用户输入一个字符串,然后显示该字符串大写字母的数目. Ente ...

  8. 90 数字三角形(Triangle)

    文章目录 1 题目 2 解决方案 2.1 思路和图解 2.1.1 遍历法和分治法 2.1.2 带记忆化搜索的分治法 2.1.3 至底向上的动态规划 2.1.4 至顶向下的动态规划 2.3 时间复杂度 ...

  9. java三角形类 继承_java编程三角形(Triangle类)继承

    import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.pr ...

最新文章

  1. python pip 安装报错 error in setup command: use_2to3 is invalid. 解决方法
  2. 七、Linux串口编程
  3. VTK:图片之MarkKeypoints
  4. jvm上的随机数与熵_向您的JVM添加一些熵
  5. mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)
  6. js中div显示和隐藏钮为什么页面总是跳一下到最上面
  7. HDU3544 不平等博弈
  8. Serverless 是一种思想状态
  9. 转: android apk 防止反编译技术(1~5连载)
  10. html css 扑克牌桌面,CSS Card:纯css制作扑克牌
  11. 天行健---宇宙的生与死
  12. 物联网(IoT)行业的决策管理应用
  13. AT32F435/437的如何选择选择代码启动地址
  14. uni-app 启动广告页
  15. 利用福禄克光纤测试仪了解综合布线
  16. 恶意软件免杀与技术(2022.10.08)
  17. 如何运营一家数据标注公司 (基础架构篇)
  18. 扫雷游戏软件测试,暑期社会实践 | 扫雷游戏的测试完善及总结
  19. 在键盘上同时按3个键有时会有一个键不起作用是什么原因?
  20. 用python写了一个简易的记账软件,后期有可能更新!

热门文章

  1. Android 常用开源框架源码解析 系列 (九)dagger2 呆哥兔 依赖注入库
  2. html5 postMessage解决跨域、跨窗口消息传递 BY:色拉油啊油
  3. 围棋学习18k到7k
  4. 我的网龙面试经历(2013年c++程序员技术面试)
  5. 光伏电站远程监控应用方案
  6. SRAM的工作原理图解
  7. 情人节送ta一朵独一无二的玫瑰花
  8. 物联网工程应用设计---楼宇消防控制系统
  9. 写给所有程序员的心声~千里马常有,但伯乐不常有
  10. nginx的配置文件详解