Leetcode每日一练--37
611. 有效三角形的个数
难度:中等
给定一个包含非负整数的数组 nums
,返回其中可以组成三角形三条边的三元组个数。
示例 1:
输入: nums = [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3
示例 2:
输入: nums = [4,2,3,4] 输出: 4
提示:
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
代码
#include <stdlib.h>int compare(const void* a, const void* b) {return (*(int*)a - *(int*)b);
}int triangleNumber(int* nums, int numsSize) {if (numsSize < 3) {return 0;}// 排序数组qsort(nums, numsSize, sizeof(int), compare);int count = 0;// 从 k = 2 开始遍历到数组末尾for (int k = 2; k < numsSize; k++) {int i = 0;int j = k - 1;while (i < j) {// 检查两边之和是否大于第三边if (nums[i] + nums[j] > nums[k]) {count += (j - i); // 所有 i 到 j-1 的元素都满足j--;} else {i++;}}}return count;
}