跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

双指针算法:有效三角形的个数

讲解如何利用双指针算法高效计算数组中能构成三角形的三元组数量。核心思路是先对数组排序,固定最长边,再利用双指针在左侧区间查找满足两边之和大于第三边的组合。该方案相比暴力枚举将时间复杂度从 O(n^3) 降低至 O(n^2)。

活在当下发布于 2026/3/28更新于 2026/10/1792 浏览
双指针算法:有效三角形的个数

题目描述

给定一个包含非负整数的数组,统计其中能组成三角形三元组的个数。

解题思路

判断三角形的条件是任意两边之和大于第三边。若数组已排序,只需验证较小两边之和是否大于最大边。

暴力解法

直接三重循环遍历所有组合,时间复杂度为 O(n^3)。

双指针优化

  1. 对数组进行升序排序。
  2. 从后向前固定最大边 nums[i]。
  3. 使用双指针 left 和 right 分别在 i 之前移动。
  4. 若 nums[left] + nums[right] > nums[i],则 left 到 right-1 之间的数均满足条件,累加计数并右指针左移。
  5. 否则左指针右移。

代码实现

class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        int ret = 0, n = nums.size();
        for (int i = n - 1; i >= 0; i--) {
            int left = 0, right = i - 1;
            while (left < right) {
                if (nums[left] + nums[right] > nums[i]) {
                    ret += right - left;
                    right--;
                } else {
                    left++;
                }
            }
        }
        return ret;
    }
};

目录

  1. 题目描述
  2. 解题思路
  3. 暴力解法
  4. 双指针优化
  5. 代码实现

更多推荐文章

查看全部
  • 数据结构基础:二叉树概念、存储结构与堆实现
  • 预训练语言模型与 BERT 实战应用
  • Flutter 三方库 shelf_modular 的鸿蒙化适配指南
  • JSP 基于身份的在线投票系统设计与实现
  • SkyWalking - .NET / C++ / Lua 探针现状与社区支持
  • 本地部署 GLM-4-9B-Chat-1M:GGUF 转换与 llama.cpp 实战
  • Qwen3-ASR-1.7B 驱动博物馆 AR 导览:语音转写与知识图谱联动
  • Llama.cpp 跨平台部署本地大模型实战指南
  • Query 处理流程与数据结构解析
  • Slack 机器人集成:基于 InstructPix2Pix 的快速修图协作方案
  • UV Python 包管理工具使用教程(Ubuntu 24.04)
  • Bruin 数据质量检查实用指南
  • 动态规划:子数组与子串问题
  • C++ string 类模拟实现详解
  • 前端报错排查指南
  • Java 随机数生成实战:范围字符串解析与动态区间控制
  • Web 创建与设计完整指南
  • Ubuntu 部署 OpenClaw 智能体框架实战指南
  • 智能交通系统的 FPGA 进化论:从基础信号灯到动态调优
  • Dify 与 MySQL 深度融合:基于 MCP 协议的数据交互实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online