LeetCode 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

先对nums进行排序,然后固定最短边,进行同向双指针:

cpp 复制代码
class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        if (nums.size() < 3) {
            return 0;
        }

        sort(nums.begin(), nums.end());

        int ans = 0;

        for (int i = 0; i < nums.size() - 2; ++i) {
            int left = i + 1;
            int right = i + 2;

            while (right < nums.size()) {
                // 当两短边之和大于长边时
                // 中边取[left, right - 1]之间的所有值都可以组成有效三角形
                if (left == right || nums[i] + nums[left] > nums[right]) {
                    ans += right - left;
                    ++right;
                } else {
                    ++left;
                }
            }
        }

        return ans;
    }
};

如果nums的长度为n,则此算法时间复杂度为O(n2^22),空间复杂度为O(logn)。

相关推荐
麻雀20256 分钟前
一键面试prompt
面试·职场和发展·prompt
海琴烟Sunshine9 分钟前
Leetcode 26. 删除有序数组中的重复项
java·算法·leetcode
PAK向日葵16 分钟前
【算法导论】NMWQ 0913笔试题
算法·面试
PAK向日葵18 分钟前
【算法导论】DJ 0830笔试题题解
算法·面试
PAK向日葵21 分钟前
【算法导论】LXHY 0830 笔试题题解
算法·面试
big\hero30 分钟前
蓝桥杯13届省题
职场和发展·蓝桥杯
麦麦麦造1 小时前
DeepSeek突然发布 V3.2-exp,长文本能力加强,价格进一步下探
算法
lingran__2 小时前
速通ACM省铜第十七天 赋源码(Racing)
c++·算法
MobotStone3 小时前
手把手教你玩转AI绘图
算法
CappuccinoRose3 小时前
MATLAB学习文档(二十二)
学习·算法·matlab