leetCode 有效三角形的个数

给定一个非负整数数组,该问题旨在计算能构成三角形边长的三元组数量。通过排序数组并采用双指针策略,可以将时间复杂度降低到O(n^2),从而提高效率。示例输入为[2,2,3,4],输出为3,有效组合包括:2,3,4(两次)和2,2,3。" 113672922,10538515,Python创建非均匀泊松方程三对角矩阵问题解析,"['Python编程', '数值计算', '矩阵运算', '科学计算', 'scipy库']
摘要由CSDN通过智能技术生成

给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例:
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

思路1:
判断能否构成三角形的基础办法是任意两边之和大于第三条边,那么暴力的去解决就得选取两条边,再选取第三条边进行比较,时间复杂度O(n^3),复杂度有点高。
思路2:
现在想想优化方案,一个简单的思路是先对原数组排序,时间复杂度O(nlogn),并不影响思路一的时间复杂度,好,现在我们有了一个排好序的数组,那现在有什么优势呢,比如说我们依旧先取两条边,现在从后往前遍历,找到满足先前找出的两条边之和大于第三条边时暂停,这时该边和该边之前的全不满足,该边之后全不满足。然而这样数据差的时候依旧不能逃过O(n^3)的悲惨命运
思路3:
O(n3)复杂度太高了,那能不能O(n2)呢。之前我们的思路都是先选取两条边,这样就已经O(n^2)了,貌似已经不行了。。。那能不能先取一条边呢?仔细想想,好像是可以的。这一条边可以取那个所谓的第三条边,然后找前两条边,此时我们假设第三条(最长边)的数组下标为k,这个时候前两条边的下标范围为0到n-1,现在起开始维护两个指针,第一个指针p指向0,第二个指针q指向n-1,这两个指针位置对

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值