leetcode 812. Largest Triangle Area
原题地址:https://leetcode.com/problems/largest-triangle-area/
题目
You have a list of points in the plane. Return the area of the largest triangle that can be formed by any 3 of the points.
Example:
Input: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
Output: 2
Explanation:
The five points are show in the figure below. The red triangle is the largest.
Note:
- 3 <= points.length <= 50.
- No points will be duplicated.
- -50 <= points[i][j] <= 50.
- Answers within 10^-6 of the true value will be accepted as correct.
利用海伦公式:
(p(p−a)(p−b)(p−c))−−−−−−−−−−−−−−−−−−−√
(
p
(
p
−
a
)
(
p
−
b
)
(
p
−
c
)
)
其中:
p=(a+b+c)/2 p = ( a + b + c ) / 2
python代码
class Solution:
def largestTriangleArea(self, points):
"""
:type points: List[List[int]]
:rtype: float
"""
max_area = 0
for i in range(len(points)-2):
for j in range(i+1, len(points)-1):
for k in range(j+1, len(points)):
max_area = max(max_area, self.area(points[i], points[j], points[k]))
return max_area
def area(self, a, b, c):
a1 = ((a[0]-b[0])**2+(a[1]-b[1])**2)**0.5
b1 = ((c[0]-b[0])**2+(c[1]-b[1])**2)**0.5
c1 = ((a[0]-c[0])**2+(a[1]-c[1])**2)**0.5
p = (a1+b1+c1)/2
area = (p*abs(p-a1)*abs(p-b1)*abs(p-c1))**0.5
return area
版权声明:转载注明 http://blog.csdn.net/birdreamer/article/details/79849868