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

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;
    }
}

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

LeetCode 581. 最短无序连续子数组/611. 有效三角形的个数/15. 三数之和/18. 四数之和(双指针)

[M双指针] lc611. 有效三角形的个数(二分+双指针+线性扫描+算法优化)

有效三角形的个数--二分和双指针

三数之和(双指针)

几数之和两种题型总结(hash表二分双指针)

LeetCode-三数之和(排序,固定一个数,然后双指针寻找另外两个数)