Description
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].
分析
题目的意思是:从数组中选择三个数构成三角形,求满足要求的组合情况的数目。
- 这道题用两边之和大于第三边的方法的话,就很暴力了,如果换一下,给数组排一下顺序,如果两个小边>大边就行了。然后就变成了3 sum的暴力问题。
代码
class Solution {
public:
int triangleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int sum=0;
for(int i=0;i<nums.size();i++){
for(int j=i+1;j<nums.size();j++){
int target=nums[i]+nums[j];
int k=j+1;
while(k<nums.size()&&target>nums[k]){
k++;
}
sum+=k-j-1;
}
}
return sum;
}
};