给定一个包含非负整数的数组 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. /**
    2. * @param {number[]} nums
    3. * @return {number}
    4. */
    5. var triangleNumber = function (nums) {
    6. let n = nums.length;
    7. if (n < 3) return 0;
    8. // 排序,双指针
    9. nums.sort((a, b) => a - b);
    10. let res = 0;
    11. for (let i = n - 1; i > 1; i -= 1) {
    12. let l = 0, r = i - 1;
    13. while (l < r) {
    14. // 组成三角形,两边只和大于第三边
    15. if (nums[l] + nums[r] > nums[i]) {
    16. res += r - l;
    17. r -= 1
    18. } else {
    19. l += 1
    20. }
    21. }
    22. }
    23. return res
    24. };

    image.png