【Leetcode】812. Largest Triangle Area

题目地址:

https://leetcode.com/problems/largest-triangle-area/

给定平面直角坐标系中的 n n n个整数点,求三个点使得它们构成的三角形面积最大,返回面积。

对于点 A = ( x 1 , y 1 ) , B = ( x 2 , y 2 ) , C = ( x 3 , y 3 ) A=(x_1,y_1),B=(x_2,y_2),C=(x_3,y_3) A=(x1,y1),B=(x2,y2),C=(x3,y3),它们组成的三角形面积是: S = 1 2 ∣ A B ⃗ × A C ⃗ ∣ = 1 2 ∣ ( x 2 − x 1 , y 2 − y 1 ) × ( x 3 − x 1 , y 3 − y 1 ) ∣ = 1 2 [ ( x 2 − x 1 ) ( y 3 − y 1 ) − ( y 2 − y 1 ) ( x 3 − x 1 ) ] S=\frac{1}{2}|\vec{AB}\times \vec{AC}|\\=\frac{1}{2}|(x_2-x_1,y_2-y_1)\times (x_3-x_1,y_3-y_1)|\\=\frac{1}{2}[(x_2-x_1)(y_3-y_1)-(y_2-y_1)(x_3-x_1)] S=21AB ×AC =21(x2x1,y2y1)×(x3x1,y3y1)=21[(x2x1)(y3y1)(y2y1)(x3x1)]枚举所有情况即可。代码如下:

class Solution {
 public:
  double largestTriangleArea(vector<vector<int>>& ps) {
    int n = ps.size();
    auto calc = [&](vector<int>& a, vector<int>& b, vector<int>& c) {
      int x1 = b[0] - a[0], y1 = b[1] - a[1];
      int x2 = c[0] - a[0], y2 = c[1] - a[1];
      return x1 * y2 - x2 * y1;
    };
    double res = 0;
    for (int i = 0; i + 2 < n; i++)
      for (int j = i + 1; j + 1 < n; j++)
        for (int k = j + 1; k < n; k++)
          res = max(res, (double)abs(calc(ps[i], ps[j], ps[k])));

    return res / 2.0;
  }
};

时间复杂度 O ( n 3 ) O(n^3) O(n3),空间 O ( 1 ) O(1) O(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值