给定一个包含非负整数的数组 nums
,返回其中可以组成三角形三条边的三元组个数。
思路:
首先需要对数组进行从小到大排序,这样会节省一些不必要的判断;需要注意的是:当从右到左循环时,然后进行双指针遍历,当后两个数之差大于第一个数时,就无法判断指针的移动。
所以应该从左到右遍历列表,这样的话前两个数之差必然小于第三个数,当他们的和小于第三个数时,便可以让left向右移动。
class Solution:
def triangleNumber(self, nums: List[int]) -> int:
nums.sort()
n = len(nums)
res = 0
for right in range(2, n):
left = 0
mid = right - 1
while left < mid:
if nums[left] + nums[mid] > nums[right]:
res += mid - left
mid -= 1
else:
left += 1
return res