611. 有效三角形的个数
分析

先将数组排序, 排完序后, 先固定A, B, 然后考虑C
因为三角形需要满足任意两边之和大于第三边
A + B > C, A + C > B 必然满足
所以只需要满足 B + C > A, 即 C > A - B
可以用双指针 扫描到最大的k, 是的 C > A - B
那么C 可以取的范围是[k, j - 1], 所以有j - 1 - k + 1 = j - k种
code
class Solution {
public:
int triangleNumber(vector<int>& nums) {
int res = 0;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size(); i ++ )
for (int j = i - 1, k = 0; j > 0 && k < j; j -- ) { // 注意是j --
while (k < j && nums[k] <= nums[i] - nums[j]) k ++ ;
res += j - k;
}
return res;
}
};
该博客介绍了一种算法,用于计算给定整数数组中能构成有效三角形的组合数量。首先对数组进行排序,然后通过双指针技巧,固定两个较小的边长,遍历数组找到可能的第三个边长,确保满足三角形的性质。这种方法的时间复杂度为O(n^2)。
1246

被折叠的 条评论
为什么被折叠?



