题目链接,描述
https://www.lintcode.com/problem/1132
给定一个包含非负整数的数组,你的任务是计算从数组中选出的可以制作三角形的三元组数目,如果我们把它们作为三角形的边长。给定数组的长度不会超过 1000.
给定数组内的整数在 [0, 1000]内.
样例
样例 1:输入: [2,2,3,4]
输出: 3
解释:
合法的组合如下:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3。
样例 2:输入:[3,3,3]
输出:1
解释:
合法的组合只有3,3,3。
思路
前置知识:三角形的两边之和大于第三边;
对数组排序后,运用前置知识即可解决本题
答案
public class Solution {/*** @param nums: the given array* @return: the number of triplets chosen from the array that can make triangles*/public int triangleNumber(int[] nums) {if(nums ==null || nums.length <3) return 0;Arrays.sort(nums);int n = nums.length;int ans =0;for (int i = 0; i <n ; i++) {for (int j = i+1; j <n ; j++) {for (int k = j+1; k < n; k++) {int a = nums[i],b=nums[j],c=nums[k];if((a+b>c) && (a+c>b) && (b+c>a)){ans++;}else{break;}}}}return ans;}
}