三角形三条边之和
public static void main(String[] args) {
int[] A = {1, 5, 6, 3, 4};
int res = triangleNumber(A);
System.out.println(res);
}
/**
* 数组中有多少个组合可以成为三角形
*
* @param A
* @return
*/
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;
//l左边的跟当前A[r]相加,肯定是小于A[i]的
//所以 l左边的跟当前A[r] 肯定也是小于A[i]的
r--;
} else {
l++;
}
}
}
return count;
}