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 <= numsi <= 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)。

相关推荐
白白白小纯3 分钟前
每日算法day3—回文链表,链表分割
c语言·数据结构·算法·leetcode
城管不管21 分钟前
RabbitMQ死信队列
java·分布式·ai·面试·职场和发展·rabbitmq·agent
手写码匠26 分钟前
华为云Flexus+DeepSeek征文|Dify 构建企业级联网搜索 Agent:查询改写、多源检索与引用溯源实战
人工智能·深度学习·算法·aigc
七夜zippoe30 分钟前
DolphinDB 能耗统计分析实战:报表生成、同比环比与定额对比
人工智能·算法·dolphindb·报表生成·能耗统计·定额对比
软件测试媛33 分钟前
软件测试面试问题汇总
功能测试·面试·职场和发展·压力测试
城管不管39 分钟前
rabbitmq如何保证消息不丢失?解决方案又是什么?
开发语言·ai·面试·职场和发展·rabbitmq·php·agent
为啥全要学40 分钟前
在大语言模型上使用 PPO 算法
人工智能·算法·语言模型
zander2581 小时前
35. 搜索插入位置:从边界语义理解二分查找
数据结构·算法·leetcode
汤愈韬1 小时前
模型求解算法
人工智能·算法·机器学习
Keven_112 小时前
算法札记:DP中的滚动数组
算法·滚动数组