1 题目描述
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。
注意:
3 <= points.length <= 50.
不存在重复的点。
-50 <= points[i][j] <= 50.
结果误差值在 10^-6 以内都认为是正确答案。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-triangle-area
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2 解题思路
枚举:
我们可以枚举每一个三角形,计算面积并找出最大的面积值。根据三角形的三个顶点计算出面积的方法有很多种:
鞋带公式,用于计算任意多边形的面积,可用于计算三角形的面积;
图片来自于: https://blog.csdn.net/u012138730/article/details/79814650
3 解决代码
- Java代码
class Solution {
public double largestTriangleArea(int[][] points) {
int N = points.length;
double ans = 0;
for(int i = 0; i<N;i++){
for(int j =i+1;j <N; j++)
for(int k = j+1; k <N;k++){
ans = Math.max(ans, area(points[i], points[j], points[k]));
}
}
return ans;
}
public double area(int[] P, int[] Q, int[] R){
return 0.5 * Math.abs(P[0]*Q[1] + Q[0]*R[1] + R[0]*P[1]
-P[1]*Q[0] - Q[1]*R[0] - R[1]*P[0]);
}
}
- python 代码
class Solution:
def largestTriangleArea(self, points: List[List[int]]) -> float:
def area(p, q, r):
return .5 * abs(p[0]*q[1]+q[0]*r[1]+r[0]*p[1]
-p[1]*q[0]-q[1]*r[0]-r[1]*p[0])
return max(area(*triangle)
for triangle in itertools.combinations(points, 3))