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

算法005——有效三角形个数

力扣——有效三角形个数点击链接跳转
在这里插入图片描述
判断三条边是否能组成三角形,大家第一时间想到的就是两边之和大于第三边
在这里插入图片描述
但是运用这个方法,我们需要判断三次,有一个更简单的方法,只需要判断一次
在这里插入图片描述
因为 C 已经是三边之中最大的了,无论加不加第二条边,都会比第三条边大,所以无需判断第一张图片中的后两种情况。

先对整个数组排序

排序完成后,我们先固定最大的数,然后枚举剩下两个数

如果按顺序枚举,时间复杂度太大,我们先用剩下的数的 最小值 与 最大值
此时有两种情况

  1. a + b > c

此时,最小值 与 b 相加都大于 c,中间的数都 大于等于 a ,那么 中间的数 + b 都大于等于 c ,我们就不需要判断中间的数与 9 相加了,此时构成三角形的个数为 下标相减,那么 9 就没用了,让 right –
在这里插入图片描述

  1. a + b <= c
    此时,最大值与 a 相加都小于等于 c,中间的数都小于等于 b ,那么 中间的数 与 a 相加都 小于等于 c,无需再判断 中间的数 与 a 相加,此时 a 没有用了,让 left++
    在这里插入图片描述
    然后 c = 10 的情况判断完了,再判断 c = 9,再重复上述循环。
class Solution {
    public int triangleNumber(int[] nums) {
        Arrays.sort(nums);
        int count = 0;
        for(int i = nums.length - 1;i >= 2;i--){//最少有三个数
            int left = 0;
            int right = i - 1;
            while(left < right){
                if(nums[left] + nums[right] > nums[i]){
                    count += right - left;
                    right--;
                }else{
                    left++;
                }
            }
        }
        return count;
    }
}

可以点个赞 让我忘本一下试试吗
在这里插入图片描述

相关文章:

  • 基于cross-attention算法关联文本和图像、图像和动作
  • 信息安全访问控制、抗攻击技术、安全体系和评估(高软42)
  • Matlab:矩阵运算篇——矩阵
  • Python —— pow()函数
  • 体验开源OpenHarmony+stratovirt模拟器
  • 第十六届蓝桥杯单片机组4T模拟赛二
  • JVM常用概念之String.intern()
  • Linux(Centos 7.6)命令详解:zip
  • 递归专题刷题
  • linux下ollama离线安装
  • Unity游戏开发中的网格简化与LOD技术(Mesh Simplification LOD)
  • Linux基础--文件权限+软件包管理+管道符
  • mysql中in和exists的区别?
  • 深入解析ECDSA与RSA公钥算法:原理、对比及AWS最佳实践
  • 【AD】5-14 多跟走线设置
  • 16位-32768的补码和原码是什么【补码和原码的转换】
  • spring IOC(实现原理)
  • 如何让一个类作为可调用对象被thread调用?
  • WSL with NVIDIA Container Toolkit
  • 基于单片机的风速报警装置设计
  • 做网站分层技术/网络推广公司哪里好
  • 纯前端网站怎么做rest/论坛seo设置
  • 公共体育课程网站建设/怎么自己做网站推广
  • wordpress建手机网站/全球疫情最新数据消息
  • 网站制作图片插入代码/企业培训课程设计
  • 如何创立个人网站/公司全网推广