leetcode 611. 有效三角形的个数(优质解法)

代码:

class Solution {public int triangleNumber(int[] nums) {Arrays.sort(nums);int length=nums.length;int n=0; //三元组的个数//c 代表三角形最长的那条边for (int c=length-1;c>=2;c--){int left=0;int right=c-1;while (left<right){if(nums[left]+nums[right]>nums[c]){n+=right-left;right--;}else {left++;}}}return n;}
}

题解:

        首先我们要知道如何判断三条边是否可以组成三角形,假设我们有三条边 a,b,c,当 a+b>c && a+c>b && b+c>a 时,a,b,c 三条边就可以组成三角形,但很明显这样判断条件过多,其实我们还有一种判断方法:

        当 a,b 为三条边中较小的两条边时,只要满足 a+b > c,就代表a,b,c 三条边可以组成三角形

        我们在数组中获取参数时,如何知道获取的边是较小的两条边还是较大的一条边呢?可以先将数组进行排序,就可以将右边的数看作较大的一条边,在该数左边的区间找较小的两条边,来判断是否可以组成三角形

        我们以数组 1,4,4,3,2 为例

        经过排序以后数组变为 1,2,3,4,4

        我们就以指针 c(nums.length - 1) 的数据作为构成三角形较大的一条边,现在我们要在该下标左边的区间选择两条边来组成三角形,让 L 指针指向 0 下标,R 指针指向 c-1 下标,两个指针代表此时选中的 a ,b 边,其中 1+4=5>4 代表是一组合格的数据,可以组成三角形

        我们可以思考,L 指针指向的边是最小的边,最小的边加上此时 R 指针指向的边都可以大于第三边,那么 L 指针右边比它大的边加上此时 R 指针指向的边也一定是大于第三边的,所以我们可以得出以 R 指针指向的边作为 b 边,c 指针指向的边作为 c 边有 3组合格的数据,即 R - L 组 合格的数据

1        2        3        4        4

L                            R        c

0        1        2        3        4

        计算出此时 R 指针指向的边作为 b 边的所有情况以后,R 指针就可以向左移动

        此时 1+3=4 <= 4 所以指向的 1,3,4 的三条边不符合要求

1        2        3        4        4

L                  R                  c

0        1        2        3        4

        因为 a ,b边的和小了,但R 指针已经指向了目前最大的一条边,所以要让 L 指针向右移动,此时 2+3=5 > 4 所以有 R - L 组 合格的数据

1        2        3        4        4

          L        R                  c

0        1        2        3        4

        计算出此时 R 指针指向的边作为 b 边的所有情况以后,R 指针就可以向左移动,当 R 指针与 L 指针指向同一个位置时,就代表以 c 指针指向的边作为 c 边的全部情况已经收集完毕,现在我们就需要将 c 指针向左移动,选择新的一条边作为 c 边,继续进行上述的操作

1        2        3        4        4

          L                            c

          R

0        1        2        3        4

        当 c 指针移动到下标 2 的位置后,就代表所有的情况都收集完毕了

1        2        3        4        4

                    c

0        1        2        3        4

        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE初阶】 HTTP响应报文

文章目录 &#x1f332;序言&#x1f38d;200 OK&#x1f340;404 Not Found&#x1f384;403 Forbidden&#x1f334;405 Method Not Allowed&#x1f38b;500 Internal Server Error&#x1f333;504 Gateway Timeout&#x1f332;302 Move temporarily&#x1f38d;301 Move…

序列号管理

序列号管理&#xff0c;将从以下方面进行学习和阐述 WHY 为什么需要序列号&#xff0c;有什么作用 HOW sap如何进行管理序列号 WHEN 什么情况下适合进行序列号管理 1、 什么是序列号 首先简单介绍一个序列号是什么东西&#xff0c;我们使用的手机、电脑或者大家…

Spring Framework远程代码执行漏洞 CVE-2022-22965 漏洞复现

Spring Framework远程代码执行漏洞 CVE-2022-22965 漏洞复现和相关利用工具 名称: Spring Framework 远程命令执行漏洞 描述: Spring core是Spring系列产品中用来负责发现、创建并处理bean之间的关系的一个工具包&#xff0c;是一个包含Spring框架基本的核心工具包&#xff0…

【SparkSQL】基础入门(重点:SparkSQL和Hive的异同、SparkSQL数据抽象)

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Spark SQL的定义、特点、发展历史、与hive的区别、数据抽象、SparkSession对象。 后续会继续分享其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一…

远程工具无法连接VMware虚拟机 (Network error: Connection timed out)

windowr输入&#xff1a;services.msc ①检查window相关的Vmmare服务是否开启&#xff1a; 确保上面这个几个启动类型是自动&#xff0c;状态是正在运行。 ②排查虚拟网卡是否禁用&#xff1a; 设置->网络->更改适配器选项&#xff1a; ③检查虚拟网络编辑器以及虚拟机…

Java数据结构之《栈实现括号匹配的检验》问题

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…

CPU虚拟化的过程

VMCS 是Virtual Machine Control Structure。是 Intel 实现 CPU 虚拟化&#xff0c;记录 vCPU 状态的一个关键数据结构。VMCS 数据结构主要包含以下信息。 Guest-state area&#xff0c;即 vCPU 的状态信息&#xff0c;包括 vCPU 的基本运行环境&#xff0c;例如寄存器等。Hos…

4G5G防爆执法记录仪、防爆智能安全帽赋能智慧燃气,可视化巡检巡线,安全生产管控

随着燃气使用的普及&#xff0c;燃气安全问题日益突出。传统应急安全问题处理方式暴露出以下问题&#xff1a; 应急预案不完善&#xff1a;目前一些燃气企业的应急预案存在实用性不高、流程不清晰等问题&#xff0c;导致在紧急情况下难以迅速启动和有效执行。 部门协同不流畅…

[Python入门系列之十二]安装Jupyter notebook与代码运行

引言 Jupyter Notebook将代码、图片和文本完美结合在一起&#xff0c;为编程学习带来了前所未有的便捷性。本文旨在为初学者提供一个关于Jupyter Notebook的入门指南。 什么是Jupyter Notebook Jupyter Notebook是一个开源的Web应用程序&#xff0c;允许你创建和共享包含代码…

wvp如果确认音频udp端口开放成功

用到工具 在服务器上开启端口监听 选中udp server&#xff0c;点击创建按钮 设置服务器监听端口 在客户端连接服务器端口 选中udp客户端&#xff0c;点击创建 输入服务器地址 远程端口和本地端口&#xff0c;本地端口只要没被占用都可以使用 &#xff0c;点击确认 发送数据 …

使用凌鲨管理本地git仓库

把本地git仓库添加到凌鲨后&#xff0c;可以更方便的获取git仓库的信息&#xff0c;比如查看commit记录&#xff0c;统计代码提交量&#xff0c;获取远程仓库的issue等功能。 功能 查看提交/分支/标记列表 查看提交差异 查看远程仓库和相关issue 每天代码量统计 添加本地仓库…

注解(概念、分类、自定义注解)

注解基本概念 注解(元数据)为我们在代码中添加信息提供一种形式化的方法&#xff0c;我们可以在某个时刻非常方便的使用这些数据。将的通俗一点&#xff0c;就是为这个方法增加的说明或功能。 作用&#xff1a; 编写文档&#xff1a;通过代码里标识的注解生成文档【生成doc文…

S7-1200PLC和KEPserver OPC通信

KEPserver属于OPCserver商用软件,在国内的市场占有率还是比较高的,这篇博客介绍S71200PLC和KEPserver通信配置,首先我们看下我们的PLC的IP地址。 1、S7-1200PLC IP地址 接下来我们在KEPserver新建通道 2、新建通道 3、选择通道网卡 4、添加PLC IP地址 5、指定扫描模式 6、…

【用unity实现100个游戏之16】Unity中程序化生成的2D地牢4(附项目源码)

文章目录 最终效果前言素材按程序放置物品放置玩家和敌人控制主角移动参考源码完结 最终效果 前言 本期紧跟着上期内容&#xff0c;主要实现在地牢中生成物品、放置玩家和敌人。 素材 物品素材&#xff1a; https://itch.io/c/1597630/super-retro-world 按程序放置物品 …

基于Qt MP3音频播放器示例(可制作音频播放器)

​本次MP3文件也给出来,方便大家调试。话不多说直接上源码。 整个项目下载地址:CSDN:GetCode 昵称-》Qt魔术师:https://gitcode.com/m0_45463480/QtMP3/tree/main## .pro # 指定项目类型为应用程序。TEMPLATE = app# 指定项目的名称为musicplayerTARGET = musicplayer# 添…

民营五百强企业——利群集团的数字化转型升级实践:全集团统一办公,低代码构建应用

利群集团是一家跨地区、多业态、综合性的大型商业集团。多年来&#xff0c;利群集团在坚持以零售连锁和商业物流配送为主业的同时&#xff0c;积极同步发展多业态。在酒店连锁、药品物流和药店连锁、房地产开发、电子商务、文化投资、进出口贸易、跨境电商、金融、快递、矿泉水…

Unity中Shader变体优化

文章目录 前言一、在Unity中查看变体个数&#xff0c;以及有哪些变体二、若使用预定义的变体太多&#xff0c;我们只使用其中的几个变体&#xff0c;我们该怎么做优化一&#xff1a;可以直接定义需要的那个变体优化二&#xff1a;使用 skip_variants 剔除不需要的变体 三、变体…

乱序学机器学习——主成分分析法PCA

文章目录 概览PCA核心思想和原理PCA求解算法PCA算法代码实现降维任务代码实现PCA在数据降噪中的应用PCA在人脸识别中的应用主成分分析优缺点和适用条件优点缺点适用条件 概览 PCA核心思想和原理 PCA求解算法 特征向量表示分布的方向&#xff0c;特征值表示沿着个方向分布的程度…

什么是算法?

一、是什么 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系统的方法描述解决问题的策略机制 也就是说&#xff0c;能够对一定规范的输入&#xff0c;在有限时间内获得所要求的输出 …

Day13 qt 高级控件,自定义控件,事件,绘图,定时器

高级控件 QListWidget 列表展示控件 效果 添加数据 ui->listWidget->addItem("A"); QStringList list; list << "B" << "C" << "D"; ui->listWidget->addItems(list); 设置item点击 void Widget::on_l…