双指针——三角形计数,就是一些细节处理要严谨,否则还是容易出错
382. 三角形计数
中文
English
给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?
样例
样例 1:
输入: [3, 4, 6, 7]
输出: 3
解释:
可以组成的是 (3, 4, 6),
(3, 6, 7),
(4, 6, 7)
样例 2:
输入: [4, 4, 4, 4]
输出: 4
解释:
任何三个数都可以构成三角形
所以答案为 C(3, 4) = 4
class Solution:
"""
@param S: A list of integers
@return: An integer
"""
def triangleCount(self, S):
# write your code here
# a+b > c
# ==> a+b-c > 0
# c=10 [3, 4, 6, 7] ==> l += 1
# c=11 [3, 4, 6, 7] ==> l += 1
# c=9 [3, 4, 6, 7] ==> r -= 1, ans += (r-1)
def find_count(arr, k, c):
l, r = 0, k
ans = 0
while l < r:
if arr[l] + arr[r] <= c:
l += 1
else:
ans += (r - l)
r -= 1
return ans
S.sort()
ans = 0
for i in range(len(S)-1, -1, -1):
ans += find_count(S, i-1, S[i])
return ans

浙公网安备 33010602011771号