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

【编程题】有效三角形的个数

文章目录

  • 一、题目
  • 二、算法讲解
  • 三、题目链接
  • 四、补充


一、题目

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

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

二、算法讲解

构成三角形的条件:任意两条边之和大于第三边,其实也就是较小的两条边之和大于最大的边,只要满足这个那么就一定是三角形。

思路1: 暴力枚举,三层循环,得到一个三角形的三条边,然后判断是否为三角形,但是时间复杂度为O(n3),可能会超时。

思路2: 可以通过双指针模拟三层循环的过程,通过一些条件来规避三层循环。

  1. 首先对数据进行升序排序
  2. 将最后也就是最大的数设置为第三条边。
  3. 两个指针left和right分别指向数据开头和最大数的前一个位置
  4. 进行判断:
    如果left和right的和大于最大的数,那么固定right,left++,两数之和都大于最大的数,因为该组数据是升序,这时候就相当于把right这个位置的数的每种可能都遍历了一遍,只要right-left计算一下三角形个数加到一起就行了,之后right–;
    如果left和right的和小于最大的数,那么固定left,right–,每种情况都是小于最大的数的,这时候就相当于把left这个位置的数的每种可能都遍历了一遍,由于这种情况是不满足三角形的,只需要left++就行了。
  5. 最大的数位置-1,回到步骤3再次进行判断,直到最大数的位置到2(因为从0开始,0、1位置肯定不可能作为三角形最大的边)。

代码:

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

三、题目链接

611. 有效三角形的个数

四、补充

类似的题目还有
11. 盛最多水的容器


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

相关文章:

  • 【mysql是怎样运行的】-EXPLAIN详解
  • 数据结构例题代码及其讲解-链表
  • [Open-source tool] 可搭配PHP和SQL的表單開源工具_Form tools(1):簡介和建置
  • 移动数据业务价值链的整合
  • 合并两个链表
  • 测试框架pytest教程(9)跳过测试skip和xfail
  • HTML <textarea> 标签
  • 探索图结构:从基础到算法应用
  • Redis之GEO类型解读
  • uniapp 微信小程序 路由跳转
  • 【android12-linux-5.1】【ST芯片】HAL移植后没调起来
  • Redis Lua脚本执行原理和语法示例
  • 百望云华为云共建零售数字化新生态 聚焦数智新消费升级
  • JMETER基本原理
  • elementUI自定义上传文件 前端后端超详细过程
  • 快速排序笔记
  • JAVA:(JSON反序列化Long变成了Integer)java.lang.Integer cannot be cast to java.lang.Long
  • ui设计师简历自我评价(合集)
  • Nginx 反向代理
  • [论文阅读笔记25]A Comprehensive Survey on Graph Neural Networks
  • iview时间控件 动态不可选日期 可选择24小时范围内 时间往后退24小时
  • Rest学习环境搭建:服务消费者
  • JVM内存模型介绍
  • 2000-2021年地级市产业升级、产业结构高级化面板数据
  • Java实现密码加密实现步骤【bcrypt算法】
  • 商城-学习整理-集群-K8S(二十三)
  • MATLAB算法实战应用案例精讲-【深度学习】强化学习
  • 时间和日期--Python
  • 【Git】学习总结
  • 手写Spring源码——实现一个简单的spring framework