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

算法刷题:有效三角形个数

有效三角形个数

  • .
  • 题目链接
  • 题目详情
  • 算法原理
    • 补充知识点
    • 双指针:对撞指针
  • 我的答案

.

在这里插入图片描述

题目链接

有效三角形个数

题目详情

在这里插入图片描述

算法原理

补充知识点

有效三角形需要满足的条件:

  1. a+b>c
  2. a+c>b
  3. b+c>a
    其实在满足1的时候,c是最大的,那么2和3是显然成立的,因此我们可以这样解题:
    对数组进行排序,先找到一个最大的边,然后对这个边的左边进行遍历和校验,看看有哪两个边能够与这个边组成三角形,然后再对次最长的边进行校验,依次循环

双指针:对撞指针

这里校验另外两个小边与大边是否能够组成三角形,我们使用的是双指针算法:利用单调性,使用双指针来解决问题
在这里插入图片描述

当nums[left]+nums[right]>最长边的时候,也就是图中2+9>10
这时left右边的数与right相加都会满足left+9>10,所以这时满足条件的个数为right-left个,那么此时与right可以匹配的数已经校验完了,现在只需要将right–,进行下一次校验即可
在这里插入图片描述
当nums[left]+nums[right]<=最长边的时候,也就是图中2+5<10
这个时候,right左边的与left相加都会小于最长边,也就不满足构成有效三角形的情况,所以此时的left就已经没有了匹配的价值了,此时需要跳过当前left,即left++,进行下一次判断
当最长边左边的区间都遍历完成之后,校验下一个最长边

我的答案

class Solution {public int triangleNumber(int[] nums) {int n = nums.length;int ret = 0;Arrays.sort(nums);for(int i = n-1;i>=2;i--){int left = 0;int right = i-1;while(left<right){if(nums[left]+nums[right]>nums[i]){ret+=right-left;right--;}else{left++;}}}return ret;}
}
http://www.lryc.cn/news/300222.html

相关文章:

  • python---变量
  • 数据库第二次实验
  • 容器高级知识:Kubernetes Pod 适配器模式详解
  • 云原生容器化-5 Docker常见操作命令
  • 几道简单的题目练一下手感
  • 2023年哪个前端框架用的最多?
  • 基于BitVM的乐观 BTC bridge
  • 谷歌浏览器安装扩展程序axure-chrome-extension
  • C++学习:大小写转换
  • 【王道数据结构】【chapter5树与二叉树】【P159t16】
  • 代码随想录算法训练营第51天 | 139.单词拆分 多重背包理论基础
  • weilai8游戏爬虫
  • 【Java程序设计】【C00261】基于Springboot的休闲娱乐代理售票系统(有论文)
  • 【Linux】学习-基础IO拓展篇
  • 算法详解(力扣141——环形链表系列)
  • 浅谈路由器交换结构
  • Linux第51步_移植ST公司的linux内核第3步_添加修改设备树
  • 【PyTorch】PyTorch中张量(Tensor)统计操作
  • 安卓游戏开发框架应用场景以及优劣分析
  • 单片机学习笔记---LCD1602
  • django中实现适配器模式
  • 题记(42)--EXCEL排序
  • 【学网攻】 第(28)节 -- OSPF虚链路
  • 百面嵌入式专栏(面试题)驱动开发面试题汇总1.0
  • Starknet 的 JavaScript 库:Starknet.js、get-starknet和starknet-react
  • debian11 安装 k8s,containerd ,阿里云镜像(已成功)
  • Spring Task定时任务
  • 【设计模式】23中设计模式笔记
  • 类加载过程介绍
  • pytorch创建模型方式