题目描述链接:https://leetcode-cn.com/problems/valid-triangle-number/
解题思路:1.暴力,将数组排序,然后进行判断即可
2.二分,将数组排序,然后找满足num[i]+num[j]>nums[k]的k的最大值,则k-j-1即为i,j情况下的有效三角形个数,然后j+1继续判断
3.双指针。nums[i]+nums[j]>nums[k]的k的最大值k1找到后,对于nums[i]+num[j+1]>nums[k]的最大值一定大于等于前者的k1故可从k1继续查找。
双指针法的参考代码如下:
class Solution { public: int triangleNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); int ans=0; int k=0; int j; int i; for(i=0;i<nums.size();i++){ k=i+2; for(j=i+1;j<nums.size();j++){ while(k<nums.size()&&nums[i]+nums[j]>nums[k]){ k++; } if(k-j-1>0)//存在满足条件,以防止将k-j-1为-1的情况计入 ans+=k-j-1; } } return ans; } };