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

题目解析

611. 有效三角形的个数
在这里插入图片描述


算法讲解

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

算法 1:暴力枚举

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++的道理同上述

代码编写

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;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/491301.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW智能家居安防系统

LabVIEW智能家居安防系统 随着科技的飞速发展和人们生活水平的不断提升&#xff0c;智能家居系统以其便利性和高效性&#xff0c;逐渐成为现代生活的新趋势。智能家居安防系统作为智能家居系统的重要组成部分&#xff0c;不仅能够提高家庭的安全性&#xff0c;还能为用户提供更…

3-Flume之拦截器与GangLia监控

Flume Interceptor 概述 Interceptor(拦截器)本身是Source的子组件之一&#xff0c;可以对数据进行拦截、过滤、替换等操作不同于Selector&#xff0c;一个Source上可以配置多个Interceptor&#xff0c;构成拦截器链。需要注意的是&#xff0c;后一个拦截器不能和前一个拦截…

zookeeper面试题

文章目录 ZooKeeper 是什么&#xff1f;ZooKeeper 提供什么&#xff1f;1. 文件系统2. 通知机制 ZooKeeper 文件系统四种类型的 znode1. PERSISTENT (持久化目录节点)2. PERSISTENT_SEQUENTIAL (持久化顺序编号目录节点)3. EPHEMERAL (临时目录节点)4. EPHEMERAL_SEQUENTIAL (临…

flutter 弹窗之系列二

自定义弹窗&#xff08;含底部抽屉&#xff09;Dialog class MyHomePage extends StatefulWidget {const MyHomePage({super.key, required this.title});final String title;overrideState<MyHomePage> createState() > _MyHomePageState(); }class _MyHomePageState…

教程3_图像的轮廓

目录 目标 1. 特征矩 2、轮廓质心 3. 轮廓面积 4. 轮廓周长 5. 轮廓近似 6. 轮廓凸包 7. 边界矩形 7.1.直角矩形 7.2. 旋转矩形 8. 最小闭合圈 9. 拟合一个椭圆 10. 拟合直线 目标 在本文中&#xff0c;我们将学习 - 如何找到轮廓的不同特征&#xff0c;例如面积&…

【数据分享】1929-2023年全球站点的逐年平均露点(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

某云盘encryptMsg 加密之自动化扣webpack

前言 本文主要介绍了webpack半自动化扣代码的流程。不需要ast基础。也不涉及加密的过程。网站硬扣的话很麻烦。特地挑一个模块多的网站去搞。着重介绍于webpack工具的使用与实现方式。 这里的话。本人也开源到了github上了。本人代码写的烂。大佬勿喷&#xff0c; https://gi…

PriorityQueue详细解读

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Quartus II仿真出现错误

ModelSim executable not found in D:/intelFPGA/18.0/quartus/bin64/modelsim_ase/win32aloem/ Error. 找不到modelsim地址&#xff0c;原来是我下载了.exe,但没有双击启动安装ase文件夹呀&#xff01;&#xff01;&#xff01;&#xff01;晕&#xff0c;服了我自己

【C++11】thread线程库

【C11】thread线程库 目录 【C11】thread线程库thread类的简单介绍函数指针lambda表达式常用在线程中 线程函数参数join与detach利用RAII思想来自动回收线程 原子性操作库(atomic)atomic中的load函数&#xff1a;atomic中对变量进行原子操作的一些函数 CAS(Compare-And-Swap)无…

YOLOv5全网独家改进: 红外小目标 | 注意力改进 | 多膨胀通道精炼(MDCR)模块,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:多膨胀通道精炼(MDCR)模块,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv5原创自研 https://b…

jupyter lab使用虚拟环境

python -m ipykernel install --name 虚拟环境名 --display-name 虚拟环境名然后再启动jupyter lab就行了

Gitea CORS Access-Control-Allow-Origin 的问题

最近我们在想使用我们提供的代码库进行元数据提供的时候&#xff0c;启动的服务报 CORS 问题。 如果你的 Gitea 服务器是直接暴露给外部使用的话&#xff0c;可以在 Gitea 的配置文件中添加下面的配置&#xff1a; [cors] ENABLED true ALLOW_DOMAIN *在完成上面的…

【学习心得】神经网络知识中的符号解释

这里我对我学到的神经网络知识中&#xff0c;常见的符号做一下记录和总结&#xff0c;方便自己在后面学习中复习。下图二分类识别图像识别猫为例。为了保存一张图片&#xff0c;需要三个矩阵&#xff0c;它们分别对应图片中的红、绿、蓝三种颜色通道&#xff0c;如果图片大小为…

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

aspect-ratio宽高比

<div class"wrapper"><div class"item">grid-tamplate-columns&#xff1a;设置容器每列的宽度(项目的宽度)grid-template-rows&#xff1a;设置容器每行的宽度(项目的高度)grid-row-gap&#xff1a;设置每行之间的行间距grid-column-gap&…

指定的文件类型无效: animExport

指定的文件类型无效: animExport 原因anim插件没有启用 你可以在 Maya 的“窗口”&#xff08;Window&#xff09;> “设置/首选项”&#xff08;Settings/Preferences&#xff09;> “插件管理器”&#xff08;Plug-in Manager&#xff09;中查看和管理插件。

⼗多种免费Unity VR资源⼯具

1、VRTK是⼀种⾼效的VR⼯具包&#xff0c;⽤于在Unity3d中快速构建VR解决⽅案VRTK - Virtual Reality Toolkit - [ VR Toolkit ] | Integration | Unity Asset StoreUse the VRTK - Virtual Reality Toolkit - [ VR Toolkit ] from Sysdia Solutions Ltd on your next project.…

蓝桥杯刷题-子串简写

子串简写 代码 kint(input()) s,c1,c2input().split() pre[0]*len(s) ans0 for i in range(len(s)):pre[i]pre[i-1]if c1s[i]:pre[i]1elif c2s[i] and i1-k>0:anspre[i-k1] print(ans)

亲测有效Djiango连接oracle

navicat连接本地oracle截图。 Djiango下面settings.py下面的DATABASES&#xff1a; 注意&#xff1a;USER最好不要用sys或者system可能会导致连接不了&#xff0c;最好是自己新建的oracle用户。