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 源码
细节:
- 形成三角形的三边条件为(a<b<c && a+b>c)即可。
- 先进行排序,让有序取出的abc满足a<b<c,再固定c去判断a+b>c(下标遍历固定c,再two sum之前的区间)
- 若a+b比c大,则b不动,a右移的所有a+b都大于c,加入结果之后,b左移进行下一轮
- 若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)相关推荐
- P2807 三角形计数(c++)
题目背景 三角形计数(triangle) 递推 题目描述 把大三角形的每条边n等分,将对应的等分点连接起来(连接线分别平行于三条边),这样一共会有多少三角形呢?编程来解决这个问题. 输入格式 第一行为 ...
- Triangle Count算法
1.传统算法 1.1算法描述 Triangle Count在社交网络分析中是非常有用的.这个三角形是一个三结点的小图,其中结点两两相连.假如,在Facebook上,你认识两个校友,而这两个校友彼此有相 ...
- nvGRAPH三角形计数和遍历示例
nvGRAPH三角形计数和遍历示例 #include " stdlib.h" #include" inttypes.h" #include" stdi ...
- R语言在直方图条(柱形)上添加计数(count)或者百分比(percent)标签
R语言在直方图条(柱形)上添加计数(count)或者百分比(percent)标签 目录
- #十二、编写三角形类Triangle,初始化三个属性,分别是三条边的长度,定义一个计算并打印周长的函数 #十三、编写等腰三角形类EWtriangle,继承于三角形类,初始化只用传一个腰长和一个底长,定
#十二.编写三角形类Triangle,初始化三个属性,分别是三条边的长度,定义一个计算并打印周长的函数 #十三.编写等腰三角形类EWtriangle,继承于三角形类,初始化只用传一个腰长和一个底长,定 ...
- 三、12.13.14.15.编写三角形类Triangle
作业 #12.编写三角形类Triangle,初始化三个属性,分别是三条边的长度,定义一个计算并打印周长的函数class Triangle(object):def __init__ (a,b,c):se ...
- 第五章第五十题(对大写字母计数)(count the uppercase letters)
第五章第五十题(对大写字母计数)(count the uppercase letters) *5.50(对大写字母计数)编写一个程序,提示用户输入一个字符串,然后显示该字符串大写字母的数目. Ente ...
- 90 数字三角形(Triangle)
文章目录 1 题目 2 解决方案 2.1 思路和图解 2.1.1 遍历法和分治法 2.1.2 带记忆化搜索的分治法 2.1.3 至底向上的动态规划 2.1.4 至顶向下的动态规划 2.3 时间复杂度 ...
- java三角形类 继承_java编程三角形(Triangle类)继承
import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.pr ...
最新文章
- python pip 安装报错 error in setup command: use_2to3 is invalid. 解决方法
- 七、Linux串口编程
- VTK:图片之MarkKeypoints
- jvm上的随机数与熵_向您的JVM添加一些熵
- mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)
- js中div显示和隐藏钮为什么页面总是跳一下到最上面
- HDU3544 不平等博弈
- Serverless 是一种思想状态
- 转:	android apk 防止反编译技术(1~5连载)
- html css 扑克牌桌面,CSS Card:纯css制作扑克牌
- 天行健---宇宙的生与死
- 物联网(IoT)行业的决策管理应用
- AT32F435/437的如何选择选择代码启动地址
- uni-app 启动广告页
- 利用福禄克光纤测试仪了解综合布线
- 恶意软件免杀与技术(2022.10.08)
- 如何运营一家数据标注公司 (基础架构篇)
- 扫雷游戏软件测试,暑期社会实践 | 扫雷游戏的测试完善及总结
- 在键盘上同时按3个键有时会有一个键不起作用是什么原因?
- 用python写了一个简易的记账软件,后期有可能更新!