有效三⻆形的个数
我写的
class Solution {
public int triangleNumber(int[] nums) {
Arrays.sort(nums);
int sum=0;
for (int k=nums.length-1;k>1;k--) {
int left=0;
int right=k-1;
while(right>left) {
if (nums[left]+nums[right]>nums[k]) {
sum+=(right-left);
right--;
} else {
left++;
}
}
}
return sum;
}
}
官方:
class Solution
{
public int triangleNumber(int[] nums)
{
// 1. 优化:排序
Arrays.sort(nums);
// 2. 利⽤双指针解决问题
int ret = 0, n = nums.length;
for(int i = n - 1; i >= 2; i--) // 先固定最⼤的数
{
// 利⽤双指针快速统计出符合要求的三元组的个数
int left = 0, right = i - 1;
while(left < right)
{
if(nums[left] + nums[right] > nums[i])
{
ret += right - left;
right--;
}
else
{
left++;
}
}
}
return ret;
}
}