# 有效三角形的个数
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
1
2
3
4
5
6
7
2
3
4
5
6
7
# 思路
我们知道三角形的任意两边之和大于第三边,任意两边之差小于第三边,如果这三条边长从小到大为
a 、 b 、 c
,当且仅当a + b > c
这三条边能组成三角形
/**
* @param {number[]} nums
* @return {number}
*/
var triangleNumber = function(nums) {
if(nums.length < 3) return 0
let count = 0
nums.sort((a,b) => a-b)
for(let k=nums.length-1;k>1;k--) {
let i=0,j=k-1
while(i < j) {
if(nums[i]+nums[j] > nums[k]) {
count+=j-i
j--
} else {
i++
}
}
}
return count
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21