双指针——三角形计数,就是一些细节处理要严谨,否则还是容易出错
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