From f44d4c14141850b268f5c8d283381b588702e69d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 27 Sep 2025 09:09:05 +0800 Subject: [PATCH] Add solution and test-cases for problem 812 --- .../801-900/0812.Largest-Triangle-Area/1.png | Bin 0 -> 7486 bytes .../0812.Largest-Triangle-Area/README.md | 26 ++++++-------- .../0812.Largest-Triangle-Area/Solution.go | 32 ++++++++++++++++-- .../Solution_test.go | 16 +++++---- 4 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 leetcode/801-900/0812.Largest-Triangle-Area/1.png diff --git a/leetcode/801-900/0812.Largest-Triangle-Area/1.png b/leetcode/801-900/0812.Largest-Triangle-Area/1.png new file mode 100644 index 0000000000000000000000000000000000000000..611d67dd9440cf7e45e380a6546cd3b27e36337b GIT binary patch literal 7486 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 [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array of points on the **X-Y** plane `points` where `points[i] = [xi, yi]`, return the area of the largest triangle that can be formed by any three different points. Answers within 10-5 of the actual answer will be accepted. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[0,0],[0,1],[1,0],[0,2],[2,0]] +Output: 2.00000 +Explanation: The five points are shown in the above figure. The red triangle is the largest. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Largest Triangle Area -```go ``` - +Input: points = [[1,0],[0,0],[0,1]] +Output: 0.50000 +``` ## 结语 diff --git a/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go b/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go index d115ccf5e..9e418367f 100644 --- a/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go +++ b/leetcode/801-900/0812.Largest-Triangle-Area/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +const epsilon = 1e-9 + +func canForm(a, b, c []int) (float64, bool) { + abx := b[0] - a[0] + aby := b[1] - a[1] + acx := c[0] - a[0] + acy := c[1] - a[1] + area := math.Abs(float64(abx*acy - aby*acx)) + if area > epsilon { + return area, true + } + return 0.0, false +} + +func Solution(points [][]int) float64 { + var ret float64 + l := len(points) + for i := 0; i < l-2; i++ { + for j := i + 1; j < l-1; j++ { + for k := j + 1; k < l; k++ { + area, ok := canForm(points[i], points[j], points[k]) + if ok { + ret = max(ret, area/2.0) + } + } + } + } + return ret } diff --git a/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go b/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go index 14ff50eb4..9b4619d5b 100644 --- a/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go +++ b/leetcode/801-900/0812.Largest-Triangle-Area/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 0}, {0, 1}, {1, 0}, {0, 2}, {2, 0}}, 2.00000}, + {"TestCase", [][]int{ + {1, 0}, {0, 0}, {0, 1}, + }, 0.50000}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }