有效三角形的个数(双指针或二分法)(和三数之和一模一样的思路)
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. 四数之和(双指针)