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
题意:给定一个数组,求出这个数组中有多少种能够成三角形的方案。
思路:三角形两边之和大于第三边。利用三个指针,遍历数组,找出所有方案。
代码:
public int triangleNumber(int[] nums) {
if(nums == null || nums.length <= 2)
return 0;
Arrays.sort(nums);
int result = 0;
for(int i = 2; i < nums.length; i++) {
int left = 0;
int right = i - 1;
while(left < right) {
if(nums[left] + nums[right] > num[i]) {
result += right - left;
right--;
}else {
left++;
}
}
}
return result;
}