611. Valid Triangle Number
标签(空格分隔): leetcode array medium
题目
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].
思路
本题判断的规则是最小两边之和大于第三边。我们实现了一个时间复杂度为 O ( n 2 ) O(n^2) O(n2),空间复杂度为O(1)的方法。基本思路就是先排序,再维护头尾指针遍历。
代码
class Solution {
public:
int triangleNumber(vector<int>& nums) {
//step1:先排序
sort(nums.begin(),nums.end());
int count=0,num=nums.size(),l,r;
//遍历
for(int i=num-1;i>=2;i--){
l=0,r=i-1;
while(l<r)
{
if(nums[l]+nums[r]>nums[i])
{
count+=r-l;
r--;
}
else
l++;
}
}
return count;
}
};