当前位置: 首页 > news >正文

611.有效的三角形个数

1.题目解析

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

补充:

1.三角形的判断:假设有三条边按大小排序:

 2.题目示例

示例 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

 分析题目可知是要算上重复的

3.算法分析:

①暴力枚举:

时间复杂度较高O(3*n^3)

三层for循环确定三条边,再定义一个计数器计算有小三角形的个数

//暴力枚举public int triangleNumber(int[] nums) {Arrays.sort(nums);int count=0;int len=nums.length;for(int i=0;i<len;i++){for(int j=i+1;j<len;j++){for(int k=j+1;k<len;k++){if(nums[i]+nums[j]>nums[k]){count++;}}}}return count;}

集美们,不用跑了,我帮你们试过了,过不了

解法二:

利用单调性和双指针的方法:

举个例子:

2,2,3,4,5,6,7,8,9,10

1.设置一个最大值

2.在最大数的左区间内,使用双指针和单调性的方法计算出有效三角形的个数

本宝宝建议你自己画一画,真正理解这个算法。

 会出现两种情况:

①left+right>max           count+=right-left right--

②left+right=<max         lrft++

 代码实现:

 public int triangleNumber(int[] nums) {int len=nums.length;int count=0;for(int i=len-1;i>=0;i--){int max=nums[i];int left=0;int right=i-1;while (left<right){if(nums[left]+nums[right]>max){count+=right-left;right--;}else{left++;}}}return  count;}

当然这个代码你是跑不过的,为什么呢?

因为你无法确定最大值,我举的栗子正好是我排过序的,若是没有排过序,不仅找不到最大值,还无用大学生的方法判断是否是有效三角形,所以一定要先排序(这都是姐走过的弯路)

 public int triangleNumber(int[] nums) {Arrays.sort(nums);int len=nums.length;int count=0;for(int i=len-1;i>=0;i--){int max=nums[i];int left=0;int right=i-1;while (left<right){if(nums[left]+nums[right]>max){count+=right-left;right--;}else{left++;}}}return  count;}

 本题完,欢迎指正

http://www.lryc.cn/news/255317.html

相关文章:

  • 超详细,使用JavaScript获取短信验证码
  • 利用 Python 进行数据分析实验(七)
  • 前端小技巧: 写一个异步程序示例, 使用任务队列替代promise和async/await等语法糖
  • 【Windows下】Eclipse 尝试 Mapreduce 编程
  • Python---time库
  • unity 自由框选截图(两种方法,亲测有效)
  • 项目代码规范
  • STM32的BKP与RTC简介
  • 11.Java安卓程序设计-基于SSM框架的Android平台健康管理系统的设计与实现
  • jetbrains卡顿(Pycharm等全家桶)终极解决方案,肯定解决!非常肯定!
  • c++的排序算法
  • YOLOv5独家原创改进:SPPF自研创新 | SPPF与感知大内核卷积UniRepLK结合,大kernel+非膨胀卷积提升感受野
  • 【C/PTA —— 15.结构体2(课外实践)】
  • 艾泊宇产品战略:适应新消费时代,产品战略指南以应对市场挑战和提升盈利
  • 使用autodl服务器,两个3090显卡上运行, Yi-34B-Chat-int4模型,并使用vllm优化加速,显存占用42G,速度23 words/s
  • ORACLE数据库实验总集 实验六 SQL 语句应用
  • [FPGA 学习记录] 快速开发的法宝——IP核
  • 每日一题:LeetCode-11.盛水最多的容器
  • 查看电脑cuda版本
  • centos7 docker Mysql8 搭建主从
  • CSS中 设置文字下划线 的几种方法
  • Docker构建自定义镜像
  • C#生成Token字符串
  • 文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究
  • Docker创建RocketMQ和RocketMQ控制台
  • Python---面向对象其他特性
  • 【Ambari】Python调用Rest API 获取YARN HA状态信息并发送钉钉告警
  • linux之buildroot(3)配置软件包
  • 学会用bash在linux写脚本 (一)
  • Leetcode 2949. Count Beautiful Substrings II