Given an array consists of non-negative integers, your task is to count the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.
Example 1:
Input: [2,2,3,4] Output: 3 Explanation: Valid combinations are: 2,3,4 (using the first 2) 2,3,4 (using the second 2) 2,2,3
Note:
- The length of the given array won't exceed 1000.
- The integers in the given array are in the range of [0, 1000]
public class Solution {
public int triangleNumber(int[] nums) {
}
}解决代码:
public static int triangleNumber(int[] A) {
Arrays.sort(A);
int count = 0, n = A.length;
for (int i=n-1;i>=2;i--) {
int l = 0, r = i-1;
while (l < r) {
if (A[l] + A[r] > A[i]) {
count += r-l;
r--;
}
else l++;
}
}
return count;
}先排序然后从大向前比较,小两边只和大于第三边则成立。复杂度:o(n2)
本文介绍了一种高效算法,用于计算由非负整数组成的数组中能构成三角形的三元组数量。该算法首先对数组进行排序,接着采用双指针技术从前向后遍历数组,通过判断两短边之和是否大于最长边来确定能否构成三角形,复杂度为O(n²)。
5157

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



