LeetCode-812最大三角形面积-简单

该博客介绍了一个算法问题,即给定一组点,找出能构成的最大三角形面积。通过递归回溯的方式遍历所有可能的三角形组合,并使用海伦公式计算每个三角形的面积,最终找到面积最大的一个。示例中展示了如何处理和计算包含五个点的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:812最大三角形面积-简单

题目

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

示例

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

注意

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

代码Go

package main

import (
	"fmt"
	"math"
)

func main() {
	points := [][]int{{0, 0}, {1, 0}, {0, 1}, {0, 2}, {2, 0}}
	ans := largestTriangleArea(points)
	fmt.Printf("ans: %v\n", ans)
}

func largestTriangleArea(points [][]int) float64 {
	var ans float64 = 0.0
	FindTriangle(points, 0, 0, &ans)
	return ans
}

var triangle [][]int = make([][]int, 0)

// 排列组合-递归-回溯
func FindTriangle(points [][]int, lever int, depth int, ans *float64) {
	if depth == 3 {
		tempAns := TriangleArea(triangle)
		if *ans < tempAns {
			*ans = tempAns
		}
		fmt.Printf("triangle: %v\n", triangle)
		return
	}
	for i := lever; i < len(points); i++ {
		triangle = append(triangle, points[i])
		FindTriangle(points, i+1, depth+1, ans)
		triangle = triangle[:len(triangle)-1]
	}
}

// 计算三个点组成的三角形面积
func TriangleArea(pointThree [][]int) float64 {
	res := 0.0
	x1 := pointThree[0][0]
	y1 := pointThree[0][1]
	x2 := pointThree[1][0]
	y2 := pointThree[1][1]
	x3 := pointThree[2][0]
	y3 := pointThree[2][1]
	a := math.Sqrt(float64((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)))
	b := math.Sqrt(float64((x1-x3)*(x1-x3) + (y1-y3)*(y1-y3)))
	c := math.Sqrt(float64((x2-x3)*(x2-x3) + (y2-y3)*(y2-y3)))
	p := (a + b + c) / 2
	res = math.Sqrt(p * (p - a) * (p - b) * (p - c))
	return math.Abs(res)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SoaringW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值