题目描述:
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。
注意:
3 <= points.length <= 50
.- 不存在重复的点。
-50 <= points[i][j] <= 50
.- 结果误差值在
10^-6
以内都认为是正确答案。
解法:
class Solution {
public:
double largestTriangleArea(vector<vector<int>>& points) {
// ax + by + c = 0 line function
// dist1^2 = (x1 - x2)^2 + (y1 - y2)^2
// dist2^2 = (ax1 + by1 + c)^2/((x1-x2)^2 + (y1-y2)^2)
// S^2 = 1/4*(ax1 + by1 + c)^2
// (x-x1)*(y1-y2) - (y-y1)*(x1-x2) = 0 line function
double area = 0;
int sz = points.size();
for(int i = 0; i < sz; i++){
long long x1 = points[i][0], y1 = points[i][1];
for(int j = i+1; j < sz; j++){
long long x2 = points[j][0], y2 = points[j][1];
for(int k = j+1; k < sz; k++){
long long x3 = points[k][0], y3 = points[k][1];
double tmp = (x3-x1)*(y1-y2) - (y3-y1)*(x1-x2);
area = max(area, tmp*tmp);
}
}
}
return 0.5*sqrt(area);
}
};