LeetCode刷题双指针(有效三角形的个数+三数之和)Java

使用PostgreSQL构建高可用数据库集群 在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。 阅读详情

一,有效三角形的个数

解题思路:

因为我们是判断是否可以组成三角形,所以肯定是根据三角形的三边关系,任意两边之和大于第三边来的,但是我们有更好的思路是可以值判断一次的,如下图,那我们根据这个思路,我们就可以将整个数组进行一个排序,然后固定一个最大的,然后剩下的区域定义一个最小值的左指针以及这个区域的最大值的右指针,通过挪动左指针来找到刚好符合条件的数,然后剩下范围的都是可以的,接下来就继续选第二个大,以及刚好符合的左右指针,最后将结果个数相加

代码演示:

public static void sort(int[] nums){
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]>nums[j]){
                    int tmp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=tmp;
                }
            }
        }
    }
    public static int triangleNumber(int[] nums) {
        //先找到最大的那个数下标,也就是排序之后的最后一个数
        sort(nums);
        int max=nums.length-1;
        //再定义一个三角形个数
        int sum=0;
        while (max>=2){
            int left=0;
            int right=max-1;
            while (left<right){
                if (nums[left]+nums[right]>nums[max]){
                    sum+=right-left;
                    right--;
                }else {
                    left++;
                }
            }
            max--;
        }
        return sum;
    }

二,三数之和

解题思路:

我们这题的主要难度就是如何进行去重的操作,因为我们可以通过暴力的方式一个一个加,但是很可能会出现重复的情况,所以我们主要就是解决重复的问题,那我们的思路就是先将数组进行排序,然后固定一个数a,在剩余的空间里面去寻找两数之和相加为-a的,然后两个指针同时进行移动,如果跟原来的数一样的话,就接着进行移动,这个时候就得注意如果是极端的情况下,两个指针一直移动,也就相当于后面都是重复的,接下来画图进行进一步理解

代码演示:

class Solution {
            public static void sort(int[] nums){
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                if(nums[i]>nums[j]){
                    int tmp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=tmp;
                }
            }
        }
    }
        public List<List<Integer>> threeSum(int[] nums) {
        //先对数组进行排序
        sort(nums);
        // 存放最终的三元组
        List<List<Integer>> ret = new ArrayList<>();
        //先固定第一个数
        for (int i=0;i<nums.length-2;i++){
            if (nums[i]>0){
                break;
            }
             // 对固定的第一个数去重
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            int left=i+1;
            int right=nums.length-1;
            //不能越界,所以要进行while循环
            while (left<right){
                if (nums[i]+nums[left]+nums[right]==0){
                    //进行添加
                    List<Integer> list = new ArrayList<>();
                    list.add(nums[i]);
                    list.add(nums[left]);
                    list.add(nums[right]);
                    ret.add(list);
                
                    //对左右指针进行去重
                while (left<right&&nums[left]==nums[left+1]){
                    left++;
                }
                while (left<right&&nums[right]==nums[right-1]){
                    right--;
                }
                left++;
                right--;
                }else if (nums[i]+nums[left]+nums[right]<0){
                    left++;
                }else {
                    right--;
                }
            
            }

        }
        return ret;
    }
}

STM32cubemx配置驱动DHT11模块 本篇文章将带大家学习使用DHT11湿温度模块,使用这个模块可以获取当前的温度和湿度数据。DHT11可以用于智能家居,蔬菜大棚等项目当中适用范围广。DHT11 是一种数字式温湿度传感器,由杜邦公司推出。它可以测量环境中的温度和湿度,并将测量结果以数字形式传输给微控制器或其他电子设备,适用于通过数字信号读取环境温湿度的应用场景。DHT11 传感器使用单总线数据交换协议,可以通过一个 I/O 引脚进行控制和数据传输。 阅读详情

相关推荐

UniApp消息推送进阶:不用插件实现动态语音播报(含保活策略)

本文详细介绍了在UniApp中实现动态语音播报的进阶方案,无需依赖第三方插件。核心采用透传消息传递动态数据,结合本地TTS引擎合成语音,并针对不同安卓厂商提供了深度通道配置与差异化保活策略,有效解决了App退至后台或被清理后语音播报失效的难题。

weixin_29224309的博客 490

JAVA刷题记录:专题一 双指针

【代码】JAVA刷题记录:专题一 双指针。

yonpiguxiao的博客 191

ObjectMapper解析JSON数据

的时候捕获的数据,往往需要结合文档所定义的类进行转换,也就是。库中的一个关键类,它的作用是将。对象之间进行相互转换。

weixin_57128596的博客 976

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

【LeetCode: 611. 有效三角形的个数 + 排序 + 双指针】给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

Coder_ljw的博客 770

告别手动转换!用腾讯云轻量服务器+QMT插件,5分钟搞定聚宽策略实盘(附完整源码)

本文详细介绍如何利用腾讯云轻量服务器和QMT插件快速实现聚宽策略的自动化实盘部署。通过云端信号中转站解决协议转换、信号缓存等核心问题,5分钟完成服务器配置,并附完整源码实现零改造实盘方案,显著提升量化交易效率。

weixin_28707739的博客 662

Java实现 LeetCode 611 有效三角形的个数(双指针)

611. 有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3 注意: 数组长度不超过1000。 数组里整数的范围为 [0, 1000]。 class Solution { public in...

南 墙 1万+

UE4-(IK)实现人物脚贴合地面解决斜坡上脚无旋转无法贴合地面问题

在斜面上脚陷入模型中,需要设置旋转值对脚的骨骼进行一个旋转。 解决思路:在射线检测中可以获取到检测点的法线方向,根据法线方向来计算出脚应该向哪个方向进行适当的旋转,在斜坡上,人物脚需要旋转的轴为x轴和y轴以便来贴合地面,z轴方向的旋转是不需要进行修改的。 如图所示,我们需要求得水平面与斜坡的夹角用来得出人物在x轴上的脚旋转量,在蓝图中提供反正切函数,反正切 = 锐角的邻边/对边 所以 反正切值(脚x轴值(roll)) = 法线Y轴值/法线Z轴 值。 现在将上图的人物想象成面向屏幕,脚需...

Stone的博客 3317

LeetCode 0611.有效三角形的个数:双指针

LeetCode 0611.有效三角形的个数:双指针 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

<font color="Pink">Tisfy的博客</font> 948

PINN驱动的3D不可压缩流场重建——从稀疏2D2C观测到完整物理场反演——含源码实现

多尺度融合策略在此发挥作用:高分辨率的2D2C数据用于约束平面内的精细结构,而低分辨率的3D3C数据提供第三维度的粗尺度信息。迁移学习架构在此发挥关键作用。这种策略在湍流封闭模型构建中尤为有效,其中RANS提供的平均流场与DNS的雷诺应力数据融合,显著提升了分离流的预测精度。在稀疏数据场景下,注意力权重根据观测数据的分布动态调整,强化数据缺失区域的物理约束,同时避免过拟合于观测点。这种机制与自适应采样的结合,实现了计算效率与重建精度的平衡,在仅保留约百分之十关键节点的情况下,仍能保持高物理一致性。

u012133341的博客 137

1. 在 SAP ABAP 事物码 SEGW 里创建 SAP OData 项目

本文介绍如何在 SAP ABAP 事物码 SEGW 里创建 SEGW 项目,使用工具生成 Runtime 运行时需要的资源。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5446

基础算法之双指针--Java实现(下)--LeetCode题解:有效三角形的个数-查找总价格为目标值的两个商品-三数之和-四数之和

代码优化以及细节:由于数组中可能存在重复数字,我们在对 i++,left++,right-- 时,可以跳过重复的数字,避免重复计算。如果此时 nums[i]以及大于零了,就说明其之后的数字就一定大于零,所以 nums[left] + nums[right] 也不可能 和 nums[i] 互为相反数了。

Themberfue的博客 1145

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1156

Java算法OJ(13)双指针

哈喽大家好吖,今天继续加练算法题目,一共六道双指针,希望能对大家有所帮助,废话不多说让我们开始吧。

2301_81073317的博客 2583

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

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

本文介绍了双指针算法在统计有效三角形个数问题中的应用。首先将数组排序,将三角形判定条件简化为两小边之和大于最大边。然后固定最大边,使用双指针在剩余部分寻找满足条件的两数组合。当两数之和大于最大边时,可直接计算并累加有效组合数(right-left),否则移动指针调整数值。该方法将时间复杂度从O(n³)优化到O(n²),利用了有序数组的单调性,是处理三元组统计问题的经典技巧。关键点在于排序简化判断条件,以及双指针高效统计有效组合。

2302_81265429的博客 902

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode题练习与总结:有效三角形的个数--611

本文详细介绍了如何使用排序和双指针技术解决数组中组成三角形的三元组个数问题,并提供了Java代码实现,分析了时间复杂度和空间复杂度,总结了涉及的知识点。

一直学习永不止步 981

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

刷题训练之双指针问题

最早博主续写了牛客网130道题,这块的刷题是让同学们快速进入C语言,而我们学习c++已经有一段时间了,知识储备已经足够了但缺少了实战,面对这块短板博主续写刷题训练,针对性学习,把相似的题目归类,系统的刷题,而我们刷题的官网可以参考:​​​​​​力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台而今天我们的板块是双指针问题。⭐知识讲解双指针有两种形式,一种是对撞指针,另一种是左右指针(快慢指针)。对撞指针:对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。

AAlykk的博客 1927

Java优选算法——双指针

本文介绍了双指针算法的四种常见类型及其应用场景:1. 就地双指针(原地操作数组)2. 扫描双指针(数组划分)3. 对撞双指针(左右指针)4. 快慢双指针(龟兔赛跑算法)。通过8道LeetCode题目展示了双指针的具体应用,包括移动零、复写零、快乐数判断、盛水容器、三角形计数、两数/三数/四数之和等问题。每种题型都给出了解题思路和Java代码实现,重点讲解了如何利用双指针特性优化算法效率,并处理边界条件和重复元素问题。这些例题展示了双指针在数组、链表等问题中的高效性和实用性。

2301_79204376的博客 1312

LogicStack-LeetCode 刷穿 LeetCode:611. 有效三角形的个数(中等)——排序、二分与双指针三解法全解析

本篇技术指南围绕「刷穿 LeetCode」系列第 611 题展开,完整讲解如何在给定数组中统计能组成三角形的三元组个数,并给出从「排序 + 暴力枚举」到「排序 + 二分」再到「排序 + 双指针」的三层递进式解法,配合 Java / C++ / Python 三种语言的可运行代码与复杂度分析。读完本文,你将掌握「先排序、后枚举较大边,再用二分或双指针压缩第三边查找范围」的组合优化套路,这一思路同样适

gitblog_00060的博客 432

611有效的三角形个数

本文介绍了LeetCode上判断有效三角形数量的算法思路。首先分析暴力解法三层循环不可行,进而提出排序后使用双指针优化的方法。核心思路是:排序后固定最大边,用双指针判断较小的两边之和是否大于最大边。若成立,则中间所有组合都成立,直接计算数量;否则移动指针调整组合。该算法时间复杂度为O(n²),比暴力解法更高效。最后给出了Java代码实现,并提醒注意边界条件和多种情况的处理。

L326214的博客 1008

力扣—有效三角形个数—双指针

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

2403_82759827的博客 560

双指针算法——java实现

此处仍然可以利用双指针算法,可让cur指针从0位置遍历数组,dest指针从-1位置开始,cur指针指向每遇到一个0,dest+=2,每遇到一个非0,dest+=1;每次移动dest后判断dest是否到达数组最后,如果没有则cur++;否则结束,此时,cur所指向的元素应为最后一个被复写的元素。

2201_75456895的博客 1467

leetcode611. 有效三角形的个数(java)

在数组有序的前提下,当枚举到较大数下标 iii 和次大数下标 jjj 时,在 [0,j) 范围内找的符合 nums[k′]+nums[j]>nums[i]条件的 k′的集合时,以符合条件的最小下标 k 为分割点的数轴上具有「二段性」。令 k为符合条件的最小下标,那么在 nums[i] 和 nums[j] 固定时,下标大于等于 k 的点集符合条件 nums[k′]+nums[j]>nums[i];下标小于 k的点集合不符合条件 nums[k′]+nums[j]>nums[i]。

SP_1024的博客 693

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

双指针 有效三角形的个数

日常学习分享 319

Java【手撕双指针】LeetCode 611. “有效三角形个数“, 图文详解思路分析 + 代码

"查找的本质是排除 ! ! !", 如何利用这一思想结合"对撞双指针", 巧解出有效三角形的个数? 简单题也有大学问 ! 本题重点讨论查找时, "对撞双指针"的遍历方式

yzhcjl_的博客 629

双指针算法(超详细带8道例题及算法解析) —— 包含力扣题目有283移动零、1089复写零、202快乐数、11盛水最多的容器、611有效三角形的个数、179双数之和、15三数之和、18四数之和

双指针是一种思想,而不是说真的就是定义了两个指针,它和语言没有关系,比如C++,Java,Python等都可以使用双指针算法解题,而且是一种非常常见的算法 常见的双指针有两种形式,一种是左右指针,一种是快慢指针 左右指针 一般用于顺序结构中,也称对撞指针 左右指针从两端向中间移动。一个指针从最左端开始,另一个从最右端开始,然后逐渐往中间逼近 左右指针的终止条件一般是两个指针相遇或者错开(也可能在循环内部找到结果直接跳出循环),也就是: left == right (两个指针指向同一个位置)

dream_ready的博客 989
上一篇: LeetCode刷题双指针(快乐数+盛最多水的容器)Java
下一篇: LeetCode刷题滑动窗口(长度最小的子数组)
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值