【双指针】Leetcode 有效三角形的个数

题目解析

611. 有效三角形的个数


算法讲解

回顾知识:任意两数之和大于第三数就可以构成三角形

算法 1:暴力枚举

c 复制代码
int triangleNumber(vector<int>& nums) 
{
	 // 1. 排序
 	sort(nums.begin(), nums.end());
 	int n = nums.size(), ret = 0;
 	// 2. 从⼩到⼤枚举所有的三元组
 	for (int i = 0; i < n; i++) 
 	{
 		for (int j = i + 1; j < n; j++) 
 		{
 			for (int k = j + 1; k < n; k++) 
 			{
 				// 当最⼩的两个边之和⼤于第三边的时候,统计答案
 				if (nums[i] + nums[j] > nums[k])
 				ret++;
 			} 
 		}
	 }
 	return ret;
 }

我们通过枚举每三个没有使用的数字,但是这样加上sort函数的时间,时间复杂度太高

算法 2:双指针

我们先确定一个最大数,然后在这个最大数的左边的区间寻找有效三角形

  • 如果现在的左右指针的值加起来已经 > 每一次确定的最大值:那么现在的left指针已经不需要移动了,因为当前这个数组已经是经过排序的了,所以当前的left满足条件,left右边的数字也满足条件,此时[left, right]区间的有效三角形的个数就是right - left
  • 如果现在左右指针的值讲起来 <= 每一次确定的最大值:那么就需要将left++,在新的[left, right]区间中寻找有效三角形个数,left++的道理同上述

代码编写

cpp 复制代码
class Solution {
public:
    int triangleNumber(vector<int>& nums) {
        //先排序
        sort(nums.begin(), nums.end());
        //两数之和 > 第三数
        int ret = 0;
        int n = nums.size();
        for(int i = n - 1; i >= 2; i--)
        {
            int left = 0;
            int right = i - 1;
            //现在nums[i] 就是最大的值,在最大值左边的有序区间里面寻找有效三角形
            while(left < right)
            {
                if(nums[left] + nums[right] > nums[i]) 
                {
                    ret += (right - left);
                    right--;  
                }
                else left++;
            }
        }
        return ret;
    }
};

相关推荐
未来之窗软件服务5 分钟前
SenseVoicecpp ggml-hexagon.cpp大模型[AI人工智能(七十九)]—东方仙盟
人工智能·算法·仙盟创梦ide·东方仙盟
xiaoye-duck6 分钟前
《算法题讲解指南:动态规划算法--子数组系列》--25.单词拆分,26.环绕字符串中唯一的子字符串
c++·算法·动态规划
Fcy64810 分钟前
算法基础详解(二)枚举算法——普通枚举与二进制枚举
算法·枚举算法
承渊政道24 分钟前
【优选算法】(实战:栈、队列、优先级队列高频考题通关全解)
数据结构·c++·笔记·学习·算法·leetcode·宽度优先
py有趣26 分钟前
力扣热门100题之将有序数组转为二叉搜索树
算法·leetcode
天若有情67330 分钟前
Python精神折磨系列(完整11集·无断层版)
数据库·python·算法
凌波粒31 分钟前
LeetCode--383.赎金信(哈希表)
java·算法·leetcode·散列表
xiaoye-duck1 小时前
《算法题讲解指南:动态规划算法--子数组系列》--23.等差数列划分,24.最长湍流子数组
c++·算法·动态规划
派大星~课堂1 小时前
【力扣-141. 环形链表 ✨】Python笔记
笔记·leetcode·链表
小O的算法实验室1 小时前
2026年SEVC,高密度仓库中结合任务分配的多AGV无冲突调度框架,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进