当前位置: 首页 > news >正文

LeetCode 0812.最大三角形面积:三角形面积公式考察

【LetMeFly】812.最大三角形面积:三角形面积公式考察

力扣题目链接:https://leetcode.cn/problems/largest-triangle-area/

给你一个由 X-Y 平面上的点组成的数组 points ,其中 points[i] = [xi, yi] 。从其中取任意三个不同的点组成三角形,返回能组成的最大三角形的面积。与真实值误差在 10-5 内的答案将会视为正确答案

 

示例 1:

输入:points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
输出:2.00000
解释:输入中的 5 个点如上图所示,红色的三角形面积最大。

示例 2:

输入:points = [[1,0],[0,0],[0,1]]
输出:0.50000

 

提示:

  • 3 <= points.length <= 50
  • -50 <= xi, yi <= 50
  • 给出的所有点 互不相同

解题方法:暴力

三角形面积公式怎么算,有这些方法:

假设二维平面三角形三个顶点的坐标 A(x1,y1),B(x2,y2),C(x3,y3)A(x_1, y_1), B(x_2, y_2), C(x_3, y_3)A(x1,y1),B(x2,y2),C(x3,y3)

  1. 行列式公式(Shoelace公式):S=12∣x1(y2−y3)+x2(y3−y1)+x3(y1−y2)∣S = \frac{1}{2} | x_1(y_2 - y_3) + x_2(y_3 - y_1) + x_3(y_1 - y_2) |S=21x1(y2y3)+x2(y3y1)+x3(y1y2)

  2. 向量叉积公式:设 AB⃗=(x2−x1,y2−y1),AC⃗=(x3−x1,y3−y1)\vec{AB} = (x_2-x_1, y_2-y_1), \vec{AC} = (x_3-x_1, y_3-y_1)AB=(x2x1,y2y1),AC=(x3x1,y3y1),则
    S=12∣AB⃗×AC⃗∣=12∣(x2−x1)(y3−y1)−(x3−x1)(y2−y1)∣S = \frac{1}{2} | \vec{AB} \times \vec{AC} | = \frac{1}{2} | (x_2-x_1)(y_3-y_1) - (x_3-x_1)(y_2-y_1) |S=21AB×AC=21(x2x1)(y3y1)(x3x1)(y2y1)

  3. 海伦公式(已知三边长 a,b,ca,b,ca,b,c):a=(x2−x3)2+(y2−y3)2,b=(x1−x3)2+(y1−y3)2,c=(x1−x2)2+(y1−y2)2a = \sqrt{(x_2-x_3)^2 + (y_2-y_3)^2},\ b = \sqrt{(x_1-x_3)^2 + (y_1-y_3)^2},\ c = \sqrt{(x_1-x_2)^2 + (y_1-y_2)^2}a=(x2x3)2+(y2y3)2, b=(x1x3)2+(y1y3)2, c=(x1x2)2+(y1y2)2
    s=a+b+c2,S=s(s−a)(s−b)(s−c)s = \frac{a+b+c}{2},\ S = \sqrt{s(s-a)(s-b)(s-c)}s=2a+b+c, S=s(sa)(sb)(sc)

  • 时间复杂度O(len(points)3)O(len(points)^3)O(len(points)3)
  • 空间复杂度O(1)O(1)O(1)

AC代码

C++
/** @Author: LetMeFly* @Date: 2025-09-27 12:53:08* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-09-27 15:10:05*/
class Solution {
private:inline int calc(vector<vector<int>>& points, int i, int j, int k) {int x1 = points[i][0], y1 = points[i][1];int x2 = points[j][0], y2 = points[j][1];int x3 = points[k][0], y3 = points[k][1];return abs((x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1));}
public:double largestTriangleArea(vector<vector<int>>& points) {int ans = 0;for (int i = 0; i < points.size(); i++) {for (int j = i + 1; j < points.size(); j++) {for (int k = j + 1; k < points.size(); k++) {ans = max(ans, calc(points, i, j, k));}}}return double(ans) / 2;}
};
Python
'''
Author: LetMeFly
Date: 2025-09-27 12:53:08
LastEditors: LetMeFly.xyz
LastEditTime: 2025-09-27 15:15:55
'''
from typing import List
from itertools import combinationsclass Solution:def largestTriangleArea(self, points: List[List[int]]) -> float:ans = 0for p1, p2, p3 in combinations(points, 3):x1, y1 = p2[0] - p1[0], p2[1] - p1[1]x2, y2 = p3[0] - p1[0], p3[1] - p1[1]ans = max(ans, abs(x1 * y2 - y1 * x2))  # 记得absreturn ans / 2
Python一行版
'''
Author: LetMeFly
Date: 2025-09-27 12:53:08
LastEditors: LetMeFly.xyz
LastEditTime: 2025-09-27 15:17:57
'''
from typing import List
from itertools import combinationsclass Solution:def largestTriangleArea(self, points: List[List[int]]) -> float:return max(abs((p2[0] - p1[0]) * (p3[1] - p1[1]) - (p2[1] - p1[1]) * (p3[0] - p1[0])) for p1, p2, p3 in combinations(points, 3)) / 2

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.dtcms.com/a/414211.html

相关文章:

  • LeetCode热题100--994. 腐烂的橘子--中等
  • 杭州做网站优化wordpress整站加密
  • 用Spark+Django打造食物营养数据可视化分析系统
  • 个人用云计算学习笔记 --17(DNS 服务器)
  • 泛微 Ecology10 OA 系统介绍
  • 哪个网站可以直接做ppt上海网站免费制作
  • STM32CubeMX安装教程
  • 游戏引擎以及游戏开发
  • 使用Python实现自动编写Word全自动化系统
  • 用flash做的经典网站微信公众号制作平台
  • OpenAI正式推出GPT-5-Codex增强型AI编程助手,该工具专为软件工程师设计
  • SpringMVC 进阶:核心组件详解与参数绑定全攻略
  • SpringMVC 实战:整合 MyBatis 实现完整 CRUD
  • Interleaving-Reasoning-Generation - 交错推理生成技术
  • 【C++】:继承全面解析
  • 大良营销网站建设机构设计专业所需网站
  • Spark专题-第二部分:Spark SQL 入门(8)-算子介绍-sort
  • 知识体系_分布式内存计算框架_spark
  • 银行 网站开发 干什么wordpress路径错误
  • QML 语法基础详解
  • ExcelVBA一键生成智能散点趋势图
  • ✨WPF编程基础【1.4】:类型转换器(含示例及源码)
  • 公链分析报告 - 模块化区块链2
  • 数图实战项目(十五-2:第一阶段:从RAW数据到ISP管道,听不懂在说啥?---> 那就盘它):从奥运大屏,到手机小屏,快来挖一挖里面都有什么
  • 网站开发常见面试东莞网站优化关键词推广
  • GauGAN详解与实现
  • Word如何一次性合并多个文档
  • 互联网技术服务优化大师优化项目有
  • 状态管理库 Zustand 的接入流程与注意点
  • 河北网站建设推广电话wordpress网址导航主题