一、题目
三、代码
class Solution:
def validTriangleNumber(self , nums: List[int]) -> int:
nums.sort()
res = 0
for i in range(len(nums)):
for j in range(i+1, len(nums)):
left, right = j+1, len(nums)-1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < nums[i] + nums[j]:
left = mid + 1
else:
right = mid - 1
res += left - (j+1)
return res
四、算法说明
如图所示,设置双层循环,遍历所有元素;
设置左右指针,通过二分法找到符合三角形两边之和大于第三边
的中间值mid
,同时更新左右指针;
将左指针的长度left - (j+1)
累加到最终结果。
胡萝卜
2022年8月13日16:03:33
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |