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 源码
细节:

本文探讨如何使用排序和双指针技巧优化解决LintCode题目382——三角形计数问题。通过先对数组排序,然后利用固定c元素,用两个指针法快速找出满足a+b>c的组合,降低了时间复杂度至O(n^2)。
最低0.47元/天 解锁文章
1112

被折叠的 条评论
为什么被折叠?



