Leetcode 611. 有效三角形的个数

news/2024/10/1 10:44:58

1.题目基本信息

1.1.题目描述

给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。

1.2.题目地址

https://leetcode.cn/problems/valid-triangle-number/description/

2.解题方法

2.1.解题思路

升序排列后,去两条边a和b,取b后面的第三条边c;a+c>b和b+c>a一定成立,只需要保证a+b>c,则a、b、c就可以构成一个合法三角形

2.2.解题步骤

第一步,将nums进行升序排列

第二步,从0至length-3遍历第一条边i,如果边i长度为0,在跳过此次循环;从i至length-2遍历第二条边j,使用二分法找到在j+1至length-1之间的最后一个k,使nums[i]+nums[j]>nums[k]的,根据k和j获取此次的合法组合数,循环将所有的合法组合数进行累加,最终的累加值即为题解。

3.解题代码

Python代码

class Solution:def triangleNumber(self, nums: List[int]) -> int:length=len(nums)nums.sort()result=0for i in range(length-2):if nums[i]==0:continuefor j in range(i+1,length-1):# 二分找到j右边最后一个k,使得nums[i]+nums[j]>nums[k]# 红:nums[i]+nums[j]>nums[k]的k项,蓝:nums[i]+nums[j]<=nums[k]的k项。左闭右闭:left-1始终指向红色,right+1始终指向蓝色。最终的right即为需要的twoEdgesSum=nums[i]+nums[j]left,right=j+1,length-1while left<=right:mid=(right-left)//2+leftif nums[mid]<twoEdgesSum:left=mid+1else:right=mid-1result+=right-j# print(result)return result

C++代码

class Solution {
public:int triangleNumber(vector<int>& nums) {int length=nums.size();sort(nums.begin(),nums.end());int result=0;for(int i=0;i<length-2;++i){if(nums[i]==0)continue;for(int j=i+1;j<length-1;++j){int twoEdgesSum=nums[i]+nums[j];int left=j+1,right=length-1;while(left<=right){int mid=(right-left)/2+left;if(nums[mid]<twoEdgesSum){left=mid+1;}else{right=mid-1;}}result+=right-j;}}return result;}
};

4.执行结果

在这里插入图片描述

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

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

相关文章

JavaScript笔记

关于js基本语法、面向对象及操作DOM、BOM元素的简要笔记,末尾延伸了jQuery基操 数据类型原始类型 对象类型 Map and Set流程控制 函数及面向对象函数 方法 常用内部对象 面向对象编程 (OOP)操作BOM元素 操作DOM元素 (I) 操作表单 jQuery基操 js作为一种脚本语言,可以嵌入到HT…

阿里面试:说说 jvm 锁的膨胀过程?锁内存怎么变化的?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨

闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨上图为执行语义搜索前的聚类演示 ,嵌入技术是自然语言处理的核心组成部分。虽然嵌入技术的应用范围广泛,但在检索应用中的语义搜索仍是其最常见的用途之一。https://avoid.overfit.cn/post/38350e175fa0424b8c988ad9893…

20240903

mount 我们会惊奇的发现,无论网格在哪里,只要有山覆盖了,那么这里的贡献一定是 \(\sqrt{2}\),如下的图可以证明:那么我们就只用开一个线段树,维护的是最小值和最小值的出现次数,如果最小值不为 \(0\),那么这部风就没有贡献,反之贡献就要加上最小值的出现次数 细节 由于我们可以…

南沙C++信奥赛陈老师解一本通题: 1963:【13NOIP普及组】小朋友的数字

​【题目描述】有 nn 个小朋友排成一列。每个小朋友手上都有一个数字,这个数字可正可负。规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之和的最大值。 作为这些小朋友的老师,你需要给每个小朋友一个分数,分数是这…

Python工程数学2程序开胃菜(上)

2 数学程序开胃菜 在上一章中( https://mp.weixin.qq.com/s/kKenXcEXIeLd_u_2kymF8A ),我们介绍了python的IDE;用numpy实现向量计算;用Matplotlib绘图;用sympy实现微积分和求导;用SciPy实现积分;用VPython实现弹跳球动画。在本章中,您将了解 Python 命令式编程风格的线…

河道水位识别系统

河道水位识别系统采用视频智能分析功能,河道水位识别系统利用前端摄像头实时获取前端视频视频后,自动识别水尺位置,并在水尺区域将水尺进行数字分割,河道水位识别系统然后再通过水位线的位置,通过AI图像识别技术将数字与水位线位置结合对别,即可识别出水尺读数。河道水位…

自动识别是否穿着工作服

自动识别是否穿着工作服通过AI视频分析技术,自动识别是否穿着工作服对作业区域现场人员工作服是否穿戴进行7*24小时实时监测。自动识别是否穿着工作服监测到现场有人未穿戴工作服时,不需人为干预立即抓拍告警,并联动音箱提醒现场人员穿戴工作服。自动识别是否穿着工作服代替…