今晚20:00直播讲「力扣入门」,直播间地址

大家好,我是 @负雪明烛。👈👈 点击关注,优质题解不间断。

题目大意

给出一些平面上点的二维坐标,求从这些点中抽取出 3 个点,能组成的最大的三角形面积。

题意很清晰。

解题方法

思路

我们把 812. 最大三角形面积 - 图1分别向 812. 最大三角形面积 - 图2 轴投影,分别得到点812. 最大三角形面积 - 图3

可以得到 3 个梯形:以下图中的黄色的边为梯形的上下边,分别以三角形的三条边作为梯形的斜边

于是得到:

812. 最大三角形面积 - 图4
812. 最大三角形面积 - 图5
812. 最大三角形面积 - 图6

我们就有了根据三角形的三点的坐标求面积的公式。

代码

三重 812. 最大三角形面积 - 图7循环,从题目给出的二维坐标中取出 3 个点,根据上面的面积公式求组成的三角形面积。

取最大面积即可。

  1. class Solution:
  2. def largestTriangleArea(self, points):
  3. """
  4. :type points: List[List[int]]
  5. :rtype: float
  6. """
  7. res = 0
  8. N = len(points)
  9. for i in range(N - 2):
  10. for j in range(i + 1, N - 1):
  11. for k in range(i + 2, N):
  12. (x1, y1), (x2, y2), (x3, y3) = points[i], points[j], points[k]
  13. res = max(res, 0.5 * abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)))
  14. return res

复杂度

  • 时间复杂度:$O(N^3)$,812. 最大三角形面积 - 图8是给出的坐标数。
  • 空间复杂度:$O(1)$,没用额外空间。

    总结

  1. 求三角形的面积是两千年来的经典问题,除了死记公式以外,不妨按照我上面的做法画三条辅助线形成梯形去求。



我是 @负雪明烛 ,刷算法题 1000 多道,写了 1000 多篇算法题解,收获阅读量 300 万。
关注我,你将不会错过我的精彩动画题解、面试题分享、组队刷题活动,进入主页 @负雪明烛 右侧有刷题组织,从此刷题不再孤单。