算法随笔_13: 有效三角形的个数
上一篇:算法随笔_12:最短无序子数组-CSDN博客
=========================
题目描述如下:
给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。
示例 1:
输入: nums = [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3
=========================
算法思路:
首先,我们重温一下三角形三条边的关系,每两边之和大于第三边。假设三条边为e1,e2,e3。那么需要保证,e1+e2>e3,e1+e3>e2,e2+e3>e1。
那么初步能想到的算法就是通过三层循环,依次访问不同的三个数,同时判断上面的三个条件是否成立。很显然时间复杂度非常高。我们考虑一下如何优化它。
由于大量的操作是比较大小,既然是比较大小,那么我们考虑一下如果把数组排序完之后是不是能找到更优的算法呢?
我们先把数组进行升序排列。第一层循环从第一个元素开始,把它做为e1,第二层循环从第二个元素开始,把它做为e2。e3的选择肯定在e1,e2之后,由于此时数组是升序排列,因此有下面一系列的推理:
e3必定大于e1,e2,
推出e1+e3>e2,e2+e3>e1肯定成立,
推出我们只需要判断e1+e2>e3这个条件。
此时问题已经简化。但是e3也需要第三层循环吗?那样做的话,和上面的算法就一样了。此时,我们从另一个角度考虑一下这个问题。判断e1+e2>e3,是不是就相当于从e1,e2后面的元素里寻找一个特定的值e3。从某组有序的数列中查找一个特定的值,我们立刻就能想到可以使用二分查找法。
使用二分查找法的基本思想就是:
1. 我们设e1,e2后面的那个数组区间为seg。设e3的最大值为e3_max。
2. 计算得出seg的中间元素e_mid,判断e1+e2是否大于e_mid。如果小于,说明e3_max肯定不在seg区间的右半边,我们把seg重新赋值为seg区间的左半边。如果大于,说明e3_max有可能在seg区间的右半边,我们把seg重新赋值为seg区间的右半边。然后重复步骤2,直至找到e3_max。
那么e3_max的左侧所有元素均可做为e3的候选,都满足e1+e2>e3。此时,e1,e2,e3都已经找出。算法的时间复杂度为。
接下来,我们继续优化上面的算法。假设现在我们找到了第一组e1,e2,e3_max,当访问下一个e2时,下一个e3_max一定出现在当前e3_max的右侧。即,当e2递增时,e3_max也在递增。
和上面的算法类似,优化后的算法如下:
1. 我们先设个变量e3_max_ind表示e3_max的下标。
2. 我们同样使用两层循环,分别迭代e1,e2,将e3_max_ind设置为e2的下一个元素,并不断的向右寻找,直到找到最大的e3且满足e1+e2>e3,即e3_max。
3. 在第二层循环,继续访问下一个e2,此时只需要从当前的e3_max_ind处开始寻找下一个e3_max。
在两层循环完成之后,我们就找到了所有的e1,e2,e3。此算法的时间复杂度为。
实现上述算法时,要注意一些边界问题,比如: 找不到e3的情况。
相关文章:
算法随笔_13: 有效三角形的个数
上一篇:算法随笔_12:最短无序子数组-CSDN博客 题目描述如下: 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 算法…...
WSL 2 自动更新 虚拟 IP 到 window hosts
window下的wsl2 开发中使用到 域名映射,但是WSL2 每次启动都会被分配一个虚拟的 ip 地址,每次启动虚拟ip 都不一样,导致要频繁 更改 window 的 hosts 文件,太麻烦了,所以写一个自动执行的 .sh 脚本,每次启动…...
我在广州学Mysql 系列——触发器的使用
ℹ️大家好,我是练小杰,这周是春节前的最后一周了,现在一双手数都能数得过来了!! 本播客将学习MYSQL中触发器的相关概念以及基础命令~~ 回顾:👉【MYSQL视图相关例题】 数据库专栏👉【…...
【useCallback Hook】在多次渲染中缓存组件中的函数,避免重复创建函数
文章目录 什么是 useCallback?基本语法 为什么需要 useCallback?示例1. 避免子组件重复创建函数2. 作为 useEffect 的依赖项 注意事项总结 在 React 开发中,性能优化是一个重要的主题。随着应用规模的增长,组件的重新渲染可能会变…...
2025/1/20 学习Vue的第三天
玩性太大了玩得也不开心,天天看电视刷视频。 内心实在空洞。 最近天天看小红书上的外国人,结实外国友人(狗头)哈哈哈认识了不少人,有埃及的有美国的,还有天天看菲利普吃糖葫芦哈哈哈哈哈一个阳光的德国大男…...
Kotlin Bytedeco OpenCV 图像图像49 仿射变换 图像裁剪
Kotlin Bytedeco OpenCV 图像图像49 仿射变换 图像裁剪 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…...
金融项目实战 07|Python实现接口自动化——连接数据库和数据清洗、测试报告、持续集成
目录 一、投资模块(投资接口投资业务) 二、连接数据库封装 和 清洗数据 1、连接数据库 2、数据清洗 4、调用 三、批量执行测试用例 并 生成测试报告 四、持续集成 1、代码上传gitee 2、Jenkin持续集成 一、投资模块(投资接口投资业务…...
(快速入门)保姆级详细的 Midjourney 基础教程
一、前言篇 1. 1. AI 绘图是什么? AI 绘画,顾名思义就是利用人工智能进行绘画,是人工智能生成内容(AIGC)的一个应用场景。其主要原理简单来说就是收集大量已有作品数据,通过算法对它们进行解析,最后再生成新作品,而算法也便是 AI 绘画的核心,是它得以爆火的基础…...
leetcode——找到字符串中所有字母异位词(java)
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "…...
大文件上传服务-后端V1V2
文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节,把之前做的项目拿过来总结一下,自己写的一个…...
Single-Model and Any-Modality for Video Object Tracking——2024——cvpr-阅读笔记
Single-Model and Any-Modality for Video Object Tracking 摘要相关工作创新处MethodShared embeddingModal promptingRGB Tracker based on TransformerOverall ExperiimentDatasetRGB-D samples are sourced from DepthTrackRGB-T samples are extracted from LasHeRRGB-E s…...
阳振坤:AI 大模型的基础是数据,AI越发达,数据库价值越大
2024年1月12日,第四届OceanBase数据库大赛决赛在北京圆满落幕。在大赛的颁奖典礼上,OceanBase 首席科学家阳振坤老师为同学们献上了一场主题为“爱上数据库”的公开课,他不仅分享了个人的成长历程,还阐述了对数据库行业现状与未来…...
Linux磁盘空间不足,12个详细的排查方法
在Linux系统运维过程中,磁盘空间不足是一个常见且棘手的问题。当磁盘空间被占满时,系统的正常运行会受到影响,甚至可能导致服务中断。因此,迅速有效地排查和解决磁盘空间问题显得尤为重要。本文将详细介绍16个排查Linux磁盘空间问…...
Spring Web MVC综合案例
承接上篇文章——Spring Web MVC探秘,在了解Spring Web MVC背后的工作机制之后,我们接下来通过三个实战项目,来进一步巩固一下前面的知识。 一、计算器 效果展示:访问路径:http://127.0.0.1:8080/calc.html 前端代码&a…...
微软预测 AI 2025,AI Agents 重塑工作形式
1月初,微软在官网发布了2025年6大AI预测,分别是:AI模型将变得更加强大和有用、AI Agents将彻底改变工作方式、AI伴侣将支持日常生活、AI资源的利用将更高效、测试与定制是开发AI的关键以及AI将加速科学研究突破。 值得一提的是,微…...
lvgl性能调优
LV_USE_PERFORMANCE lvgl_performance 是 LVGL 提供的性能分析工具,可以帮助开发者评估和优化图形库的性能。在一些特定的版本中,lvgl_performance 是一个宏或者工具,用来分析性能瓶颈,特别是图形渲染的效率。 下面是如何使用 l…...
CSS实现实现票据效果 mask与切图方式
一、“切图”的局限性 传统的“切图”简单暴力,但往往缺少适应性。 适应性一般有两种,一是尺寸自适应,二是颜色可以自定义。 举个例子,有这样一个优惠券样式 关于这类样式实现技巧,之前在这篇文章中有详细介绍: CSS 实现优惠券的技巧 不过这里略微不一样的地方是,两个…...
STL--list(双向链表)
目录 一、list 对象创建 1、默认构造函数 2、初始化列表 3、迭代器 4、全0初始化 5、全值初始化 6、拷贝构造函数 二、list 赋值操作 1、赋值 2、assign(迭代器1,迭代器2) 3、assign(初始化列表) 4、assig…...
ZooKeeper 中的 ZAB 一致性协议与 Zookeeper 设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色)
参考Zookeeper 介绍——设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色) ZooKeeper 设计目的、特性、使用场景 ZooKeeper 的四个设计目标ZooKeeper 可以保证如下分布式一致性特性ZooKeeper 是一个典型的分布式数据一致…...
“深入浅出”系列之C++:(11)推荐一些C++的开源项目
1. SQLiteCpp - 简单易用的Sqlite C封装库 仓库地址:https://github.com/SRombauts/SQLiteCpp 简介:SQLiteCpp是一个对Sqlite数据库进行C封装的开源库,代码行数约2,500行。它提供了简洁易用的接口,使得在C项目中操作Sqlite数据库…...
Qwen3-4B Instruct-2507效果实测:金融研报关键信息抽取准确率达89.4%
Qwen3-4B Instruct-2507效果实测:金融研报关键信息抽取准确率达89.4% 1. 引言:当大模型遇上金融研报 金融分析师每天都要面对海量的研究报告。一份动辄几十页的研报,里面藏着公司业绩、行业趋势、投资建议等关键信息。传统的人工阅读和提取…...
VMware虚拟化环境中的Cosmos-Reason1-7B性能调优
VMware虚拟化环境中的Cosmos-Reason1-7B性能调优 在VMware虚拟化环境中部署和优化大语言模型时,合理的资源配置和性能调优至关重要。本文将分享针对Cosmos-Reason1-7B模型的VMware专项优化指南,帮助你在虚拟化环境中获得接近物理机的性能表现。 1. 环境准…...
Java与C++:7大核心差异全解析
好的,Java 和 C 都是广泛使用的面向对象编程语言,但它们在设计哲学、特性和应用场景上存在显著区别。以下是它们的主要差异:1. 内存管理C:支持手动内存管理(通过 new/delete 操作符)。程序员需自行分配和释…...
Pixel Couplet Gen实操手册:像素春联生成结果导出PNG/SVG格式的前端实现方案
Pixel Couplet Gen实操手册:像素春联生成结果导出PNG/SVG格式的前端实现方案 1. 项目背景与核心价值 Pixel Couplet Gen是一款融合传统春节文化与现代像素艺术风格的创新工具。通过ModelScope大模型的文本生成能力,结合精心设计的8-bit视觉元素&#x…...
Qwen2.5-7B-Instruct镜像免配置:5分钟完成7B模型本地对话服务
Qwen2.5-7B-Instruct镜像免配置:5分钟完成7B模型本地对话服务 想体验7B大模型的强大推理能力,又担心复杂的部署流程和显存爆炸?今天,我们带来一个开箱即用的解决方案。基于阿里通义千问官方旗舰版Qwen2.5-7B-Instruct模型&#x…...
Lychee-Rerank在软件测试报告分析中的应用:自动归类与优先级排序
Lychee-Rerank在软件测试报告分析中的应用:自动归类与优先级排序 你是不是也遇到过这种情况?每天跑完自动化测试,面对成百上千条失败用例的日志,感觉头都大了。一条条看过去,眼睛都花了,结果发现很多失败的…...
同样是硅做的圆片,价差百倍的秘密:半导体与光伏晶圆的本质区别
如果你留意过半导体和光伏行业的产品价格,一定会有这样的疑问:同样是硅材质、尺寸相近的晶圆,高端半导体晶圆一片能卖到几千元,而光伏硅片却只要几十元,身价相差近百倍。明明都是“硅做的圆片”,为何命运如此不同? 其实答案很简单:它们看似同宗同源,实则从一开始就被…...
Graphormer效果展示:金属配合物氧化还原电位预测与循环伏安图拟合
Graphormer效果展示:金属配合物氧化还原电位预测与循环伏安图拟合 1. 模型概述 Graphormer是微软研究院开发的基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。与传统的图神经…...
2025届毕业生推荐的降AI率助手解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在内容创作这个范畴里,要降低AIGC也就是人工智能生成内容的那种明显特征…...
广州邮科选型指南:挑选可调电源必须关注的四个核心参数
在电子工程师的工作台上,有一种设备兼具了灵活性与智能保护——它就是可调稳压恒流开关电源。这种电源不仅是供电工具,更像是懂得自我保护的"智能能源管家"。它如何同时实现稳压与恒流?传统电源往往只能固定输出,而这类…...
