给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?
两个较小的边大于第三条边 则一定为三角形
先排序
遍历每个元素 在当前元素前面的区间 去找个俩个数的和大于当前元素
public class Solution {
/**
* @param S: A list of integers
* @return: An integer
*/
public int triangleCount(int[] S) {
int n = S.length;
if(S == null || n < 3)
return 0;
int count = 0;
Arrays.sort(S);
for(int i = 2; i < n; i++){
count = isTriangle(S, 0, i - 1, S[i], count);
}
return count;
}
public int isTriangle(int[] nums, int left, int right, int target, int count){
while(left < right){
if(nums[left] + nums[right] > target){
count += right - left;
right--;
}
else{
left++;
}
}
return count;
}
}