题目

给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。

示例:
输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出: 2
解释:
这五个点如下图所示。组成的橙色三角形是最大的,面积为2。 image.png 注意:

3 <= points.length <= 50.
不存在重复的点。
-50 <= points[i][j] <= 50.
结果误差值在 10^-6 以内都认为是正确答案。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-triangle-area
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

暴力枚举三个顶点求面积即可。

已知三个点坐标求三角形面积的公式为812. 最大三角形面积 - 图2%20%20(y2%20-%20y3)%20-%20(x2%20-%20x3)%20%20(y1%20-%20y3))%7C#card=math&code=S%20%3D%201%2F2%20%2A%20%7C%28x1%20-%20x3%29%20%2A%20%28y2%20-%20y3%29%20-%20%28x2%20-%20x3%29%20%2A%20%28y1%20-%20y3%29%29%7C&id=w1NLl)

代码

  1. class Solution {
  2. public double largestTriangleArea(int[][] points) {
  3. double ans = 0;
  4. int n = points.length;
  5. for (int i = 0; i < n; i++) {
  6. int x1 = points[i][0];
  7. int y1 = points[i][1];
  8. for (int j = i + 1; j < n; j++) {
  9. int x2 = points[j][0];
  10. int y2 = points[j][1];
  11. for (int k = j + 1; k < n; k++) {
  12. int x3 = points[k][0];
  13. int y3 = points[k][1];
  14. ans = Math.max(ans, 0.5 * Math.abs((x1 - x3) * (y2 - y3) - (x2 - x3) * (y1 - y3)));
  15. }
  16. }
  17. }
  18. return ans;
  19. }
  20. }