File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed
Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change 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/
You can’t perform that action at this time.
0 commit comments