解题思路-LeetCode第611题:有效的三角形个数
题目描述:
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例 1:
输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3
解题思路:
首先排序,固定最小的边 nums[i],选定另外两条边,左指针 j = i + 1, 右指针 k = i + 2,找到满足条件的k的最大值,则k左边的值都满足条件,即当 k < n 且 nums[i] + nums[j] > nums[k] 时,右移k, 直到 k >= n 或者 nums[i] + nums[j] <= nums[k],贡献数目为k - 1 - j。
j++,当 j < n - 1, 执行步骤1,否则结束(因为上一步中 nums[i] + nums[j] > nums[k], 那么j右移一位以后,仍然有nums[i] + nums[j + 1] > nums[k], 所以k从上一次的位置继续右移)
代码如下:
提交后,通过。