有效三角形的个数(双指针或二分法)(和三数之和一模一样的思路)

Posted 秦枫-_-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有效三角形的个数(双指针或二分法)(和三数之和一模一样的思路)相关的知识,希望对你有一定的参考价值。


力扣链接:链接: 力扣.

class Solution 
    public int triangleNumber(int[] nums) 
    int ans=0;
    Arrays.sort(nums);
     for(int i=nums.length-1;i>=2;i--)
         int x3=nums[i];
        int j=i-1,k=0;
        while(k<j)
            if(nums[k]+nums[j]>x3)
             ans+=j-k;
             j--;
            
            else k++;
        
     
     return ans;
    



简单点的可以用二分法不过时间复杂度要比双指针高ologn

class Solution 
    public int triangleNumber(int[] nums) 
    int ans=0;
    Arrays.sort(nums);
     for(int i=nums.length-1;i>=2;i--)
         int x3=nums[i];
         for(int j=i-1;j>=1;j--)
             int x2=nums[j];
             int x1=x3-x2;
             int left=0,right=j-1;
             while(left<right)
                 int mid=(right-left)/2+left;
                 if(nums[mid]>x1)right=mid;
                 else left=mid+1;
             
             ans+=nums[left]>x1?j-left:0;
         
     
     return ans;
    

以上是关于有效三角形的个数(双指针或二分法)(和三数之和一模一样的思路)的主要内容,如果未能解决你的问题,请参考以下文章