题意:给你一堆点,选出三个点来组成三角形面积最大,输出最大三角形的面积。
解题思路:开始想着用图论的方法找到这三个点,无奈陷入江局,看了数据规模共50个点,使用暴力算法的时间复杂度是O(n3),可以接受。
已知三个点坐标求三角形面积公式有两种较为简单的方法,一种是海伦公式,s=sqrt(p(p-a)(p-b)(p-c)),其中p=(1/2)(a+b+c),其中a、b、c分别是三个边的长度。通过点计算边,然后计算面积。
所以三角形的面积S= (1/2) * abs
|x1 y1 1|
|x2 y2 1|
|x3 y3 1|
class Solution {
public:
double largestTriangleArea(vector<vector<int>>& points) {
double s, ans = 0;
for(int i = 0; i < points.size() - 2; i++)
{
for(int j = i + 1; j < points.size()-1; j++)
{
for(int k = j + 1; k < points.size(); k++)
{
s = (1.0/2) * abs(points[i][0]*points[j][1] + points[j][0]*points[k][1]
+ points[i][1]*points[k][0] - points[k][0]*points[j][1]
- points[j][0]*points[i][1]-points[i][0]*points[k][1]);
ans = ans > s ? ans : s;
}
}
}
return ans;
}
};