611. 有效三角形的个数 - 力扣

03-03 1332阅读 0评论

1. 题目

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

611. 有效三角形的个数 - 力扣,611. 有效三角形的个数 - 力扣,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,我们,方法,要求,第1张
(图片来源网络,侵删)

2. 示例

611. 有效三角形的个数 - 力扣

3. 分析 

利用已升序了的数组通过 a + b > c 这条公式找出符合要求的三元组,利用这个公式的前提是三条边为从小到大,再利用单调性快速统计出符合要求的三元组个数。

解题方法

  1. 先固定到最大的数(c),即nums[nums.size()-1]。
  2. 再最大数的左区间内,定位一左(a)一右(b)指针分别指向区间左右。

现在就可以开始寻找符合要求的三条边了。

两边之和有两种情况:

  • a + b > c

    这是符合要求的情况。我们知道数组是升序的,因为此时 left(a) + right(b) 已经是大于 c 了,那么[left+1, right-1] (a)这个区间内的数 + right(b) 也是肯定大于 c 了,因为数组是升序的(单调性)。所以此时符合要求的三元组个数就为(right-left),这个组合下的right(b)可以舍弃掉了,再--看下一个b的情况即可。

  • a + b = 2; i--)// 固定最大的数,因为是三元组,从2开始 { // 利用双指针统计出符合要求的三元组的个数 int left = 0, right = i - 1; while (left nums[i]) { ret += right - left; right--; } else { left++; } } } return ret; } };
    611. 有效三角形的个数 - 力扣,611. 有效三角形的个数 - 力扣,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,我们,方法,要求,第3张
    (图片来源网络,侵删)

免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1332人围观)

还没有评论,来说两句吧...

目录[+]