【LeetCode: 611. 有效三角形的个数 + 排序 + 双指针】

RandLA-Net Tensorrt 推理 c++ RandLA-Net 实现 Tensorrt 部署. 阅读详情

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给定一个包含非负整数的数组 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 <= nums[i] <= 1000

🌟 求解思路&实现代码&运行结果


⚡ 排序 + 双指针

🥦 求解思路
  1. 排序:首先对数组进行排序,方便后续的双指针操作。

  2. 固定最长边:

    • 从数组的末尾开始,固定最长边 nums[i]。

    • 使用双指针 left 和 right 在 [0, i-1] 范围内寻找满足 nums[left] + nums[right] > nums[i] 的三元组。

  3. 双指针法:

    • 如果 nums[left] + nums[right] <= nums[i],说明 nums[left] 太小,需要增大 left。

    • 否则,说明从 left 到 right-1 的所有元素都满足条件,累加 right - left 到结果中,并减小 right。

  4. 有了基本的思路,接下来我们就来通过代码来实现一下。

🥦 实现代码
class Solution {
    public int triangleNumber(int[] nums) {
        int res = 0;
        Arrays.sort(nums);
        for (int i = nums.length - 1; i >= 2; i--) {
            int left = 0, right = i - 1;
            while (left < right) {
                if (nums[left] + nums[right] <= nums[i]) {
                    left++;
                } else {
                    res += right - left;
                    right--;
                }
            }
        }
        return res;
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

《UDS协议从入门到精通》系列——图解0x22:通过ID读数据 如何向车辆ECU通过DID写入数据?有哪些注意事项?图解+示例带你快速上手0x22服务!! 阅读详情

相关推荐

C++cgal库配置+VS2017

Cgal几何图形库在VS2017上的下载、安装与配置。想要一口气下载完所有安装配件的,可以去文章末尾的链接。httpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttpshttps。

dsn3S的博客 1488

力扣 611. 有效三角形的个数 排序 双指针

https://leetcode-cn.com/problems/valid-triangle-number/ 思路一:排序+二分,枚举较小的两条边i、ji、ji、j,然后通过二分找到最大的满足a[i]+a[j]>a[k]a[i]+a[j]>a[k]a[i]+a[j]>a[k]的kkk,那么它们对答案的贡献为k−jk-jk−j,代码略。 思路二:当iii确定的时候,显然jjj越大,kkk也越大,因此可以利用双指针来做,每次把j+1j+1j+1,然后找到满足题意的最大的kkk统计贡献即可。

xiji333的博客 293

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 127

【算法-LeetCode】611. 有效三角形的个数(排序;二分;双指针;回溯;递归)

611. 有效三角形的个数 - 力扣(LeetCode) 文章起笔:2021年11月17日24:13:04 问题描述及示例 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 注意: 数组长度不超过1000。 数组里整数的范围为 [0, 1000]。 我的题解 执行结果:超出时间限制 最后执行的输入: [874,97

赖念安的博客 818

robot framework循环读取excel表操作

robot framework循环读取excel表操作 1、安装excellibrary,注意python3.7版本,需安装:robotframework-excel,robotframework-excellibrary-xwfintech 注意:网上有很多excel处理的,都是基于python2.7的,还有一些对python3以上都是修改包的方式,其实都不需要,在pip官网上有python3以上的excellibrary,名称是robotframework-excellib 2.0.0,但是该包关键字不

余墨的博客 1318

【时间序列预测算法】——Holt-Winters算法介绍及代码实现

背景 一阶二阶三阶指数平滑方法拟合效果均较好,通过结合数据自然属性,数据自身、趋势变化、季节性,提出了这三个角度的衡量量,可以说,理解起来更自然、更亲切。 公式 一阶: sts_tst​是t时刻对xtx_txt​的估计值,这里只有一个参数α,是数据本身的平滑属性的体现。 二阶: 引入了时间趋势变量btb_tbt​,优化了一下一阶的公式。同时还可以预测t+m时刻的值: 三阶: 又引入了季节性周期描述变量ctc_tct​,优化了一下二阶的公式。同时还可以预测t+m时刻的值: NOTE:ct

BlackValley的博客 1万+

[HOT 100] 0611. 有效三角形的个数

空间复杂度 : 排序所需的额外空间(O(log n)),,因此空间复杂度为 O(1)。时间复杂度 : 排序时间复杂度为 O(n log n)。因此,整体时间复杂度为 O(n²),其中 n 是数组。的次数为 O(n),每次循环中进行的双指针遍历。,返回其中可以组成三角形三条边的三元组个数。给定一个包含非负整数的数组。的时间复杂度为 O(n)。

人生需要动态规划 学习需要贪心算法 468

macOS 发票查验全攻略:从证书导入到Safari调试

本文详细介绍了在macOS上进行发票查验的全流程,包括证书下载、钥匙串访问导入、Safari浏览器调试等关键步骤。重点解决了验证码不显示等常见问题,提供了证书信任设置和开发者工具使用的实用技巧,帮助用户顺利完成税务发票在线查验。

weixin_29204749的博客 544

Leetcode 611. 有效三角形的个数 (排序后双指针优化)

排序,直接枚举时间复杂度O(n^3) 双指针优化:排序后,首先枚举最大的边,枚举最大的边之后,在枚举第二大的边,在枚举第二大的边的时候,最小的边只会不断向右移动,不会后退,因此可以去掉一重循环。代码如下: class Solution { public: int triangleNumber(vector<int>& nums) { sort(nums.begin(),nums.end()); int n = nums.size(); ...

wwxy1995的博客 256

innovus:InstPad、CellPad 、module padding、clock cell halo

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?site_num指的是padding的大小以site宽度为单位。

m0_61544122的博客 2018

Simulink开发项1000例实战专栏--实例17:基于 Simulink 的 BLDC 电机驱动系统的设计与实现

项目背景无刷直流电机(BLDC)因其高效、可靠、低维护的特点,广泛应用于电动汽车、无人机、工业自动化等领域。基于 Simulink 的 BLDC 电机驱动系统可以实现对电机的精确控制,包括速度控制、位置控制和转矩控制。通过仿真和测试,可以优化控制算法,提高系统的性能和可靠性。

xiaoheshang_123的博客 560

LeetCode 611. 有效三角形的个数(Valid Triangle Number)

611. 有效三角形的个数 611. Valid Triangle Number 题目描述 LeetCode LeetCode LeetCode611. Valid Triangle Number中等 Java 实现 import java.util.Arrays; class Solution { public int triangleNumber(int[] nums) { ...

weixin_30336061的博客 256

multisim14.3无法访问数据库...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 4431

Leetcode.611.有效三角形个数

Leetcode.611.有效三角形个数 题目难度:中等 题目 (官方)思路: 1、三角形满足两边之和大于第三边,或两边之差小于第三边。 2、将数组排序之后 下标 i<j<k,则需要满足条件,nums[i]+nums[j]>nums[k] 3、只需要找到最大的K的下标 求将 k-j累加的值为三角形个数。 java class Solution { public int triangleNumber(int[] nums) { int ans = 0;

不是老哥的博客 253

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode611. 有效三角形的个数

LeetCode611. 有效三角形的个数 1. 问题描述 2. 思路 三条长度为 a、b、c 的线段,能够组成三角形的充要条件是: a+b>ca + b > ca+b>c a+c>ba + c > ba+c>b b+c>ab + c > ab+c>a 2.1 思路一   解决本题的过程,就是一个搜索的过程。一种解决方案是,获取nums数组中所有长度为3的组合,判断能否满足上面三角形构成的条件。   上述解决方案是使用暴力回溯的方式,从长度为3的组合中

菜到不敢run 524

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【双指针】:Leetcode611.有效三角形的个数

LeetCode611.有效三角形个数使用双指针算法解题的详细思路

Yikefore的博客 968

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Leetcode 611. 有效三角形的个数 C++

Leetcode 611. 有效三角形的个数 题目 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 注意: 数组长度不超过1000。 数组里整数的范围为 [0, 1000]。 题解 我们将数组进行逆序排序,依次遍历数组i作为最长边,我们利用两边之和大于最长边这个性质,我们用双指针在i+1~n-1中找到符合要求的边界,用l

weixin_43750513的博客 617

LeetCode 分类刷题:611. 有效三角形的个数

这道题目要求从给定的非负整数数组中找出能构成三角形的三元组个数。关键思路是:先对数组排序,然后枚举最长边c,使用双指针法寻找满足a+b大于c的较短边a和b。当a+b大于c时,i到j-1之间的所有元素与b的组合都满足条件,然后移动j指针;否则移动i指针。时间复杂度为O(n^2),空间复杂度为O(1)。通过排序和双指针技巧,有效地避免了重复统计并优化了查找过程。

flashlight_hi的博客 1310

【双指针】专题:LeetCode 611题解——有效三角形的个数

有效三角形的个数

2401_87255690的博客 1371

【刷题】双指针进阶

文章对双指针的使用进一步进行了练习,讲解了三道经典例题!!!

叫我龙翔的博客 1396

LeetCode——611. 有效三角形的个数(Valid Triangle Number)[中等]——分析及代码(Java)

LeetCode——611. 有效三角形的个数[Valid Triangle Number][中等]——分析及代码[Java]一、题目二、分析及代码1. 排序 + 双指针(1)思路(2)代码(3)结果三、其他 一、题目 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 注意: 数组长度不超过1000。 数组里整数的范围为

江南土豆的博客 350

【leetcode 611】有效三角形的个数 js

【leetcode 611】有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 解法一:枚举 形成三角形的条件:两边之和大于第三边 var triangleNumber = function (arr) { let count = 0; let len = arr.length; for (l

一只蒻蒻的博客 872

能否构成三角形的条件代码_leetcode No.611 有效三角形的个数

题目链接:611. 有效三角形的个数 - 力扣(LeetCode)​leetcode-cn.com题目描述:给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 10...

weixin_39943370的博客 344

优选算法 力扣 611. 有效三角形的个数 双指针降低时间复杂度 贪心策略 C++题解 每日一题

本文围绕LeetCode中“有效三角形的个数”问题展开,详细阐述了从暴力枚举到双指针算法的解题思路进化过程。 首先指出该问题是双指针算法在三重循环优化中的经典应用,其核心价值在于通过排序和三角形三边关系的数学特性简化问题,将高复杂度枚举降维。接着分析了暴力枚举法的低效性,其时间复杂度为O(n³),难以满足n=1000的情况。随后利用数学知识简化三角形条件,在数组排序后(a ≤ b ≤ c),只需判断a + b > c即可确定能否组成三角形。 在此基础上,提出双指针解法:先排序数组,固定最大边c,用双指针

Q741_147的博客 780

模块一——双指针:611.有效三角形的个数

根据解法⼀中的优化思想,我们可以固定⼀个最⻓边,然后在⽐这条边⼩的有序数组中找出⼀个⼆元组,使这个⼆元组之和⼤于这个最⻓边。由于数组是有的,我们可以利⽤对撞指针来优化。此时right 位置的元素的所有情况相当于全部考虑完毕, right-- ,进⼊下⼀轮判断。三层for循环枚举出所有的三元组,并且判断是否能构成三⻆形。

quantian_的博客 240

算法训练篇06--力扣611.有效三角形的个数

根据解法一中的优化思想,我们可以固定一个最长边,然后在比这条边小的有序数组中找出一个二元组,使这个二元组之和大于这个最长边。由于数组使有序的,我们可以利用对撞指针来优化。三层for循环枚举出所有的三元组,并且判断是否能构成三角形。,返回其中可以组成三角形三条边的三元组个数。2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)给定一个包含非负整数的数组。

2301_78702440的博客 597
上一篇: 【LeetCode: 1552. 两球之间的磁力 + 二分】
下一篇: 【LeetCode: 189. 轮转数组 + 原地反转】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值