目录
题目描述:
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。
示例:
输入: 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>& 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); }};