Skip to content

Commit 4d5bbf1

Browse files
authored
Create triangle-count.py
1 parent 9b3edcd commit 4d5bbf1

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

triangle-count.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# coding: utf-8
2+
3+
class Solution:
4+
"""
5+
@param: S: A list of integers
6+
@return: An integer
7+
"""
8+
def triangleCount(self, S):
9+
# write your code here
10+
# 最简单的思路是三重循环,但是有效率问题。
11+
# 参考了网上的做法,可以改为二重循环加二分。
12+
# 但是Python的执行效率有问题,翻译成Java或C++可过。
13+
ret = 0
14+
S.sort()
15+
for i in xrange(len(S)): # 最短边
16+
for j in xrange(i + 2, len(S)): # 最长边
17+
# 用二分法确认第三条边的范围
18+
# 三角形的三条边满足如下条件:
19+
# - a - b < c
20+
# - c < a + b
21+
target = S[j] - S[i]
22+
l, r = i + 1, j
23+
while l < r:
24+
mid = int((l + r) / 2)
25+
if S[mid] > target:
26+
# 满足a - b < c,所以该边和右侧所有的边都满足
27+
r = mid
28+
else:
29+
# a - b >= c,所以该边和左侧所有的边不包含在内
30+
l = mid + 1
31+
ret += (j - l)
32+
return ret
33+
34+
# medium: http://lintcode.com/zh-cn/problem/triangle-count/

0 commit comments

Comments
 (0)