feat: 812_largest_triangle_area
This commit is contained in:
parent
6a51947dcf
commit
a908102fc1
7
812_largest_triangle_area/Cargo.lock
generated
Normal file
7
812_largest_triangle_area/Cargo.lock
generated
Normal file
@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "largest_triangle_area"
|
||||
version = "0.1.0"
|
6
812_largest_triangle_area/Cargo.toml
Normal file
6
812_largest_triangle_area/Cargo.toml
Normal file
@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "largest_triangle_area"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
34
812_largest_triangle_area/src/lib.rs
Normal file
34
812_largest_triangle_area/src/lib.rs
Normal file
@ -0,0 +1,34 @@
|
||||
pub struct Solution;
|
||||
|
||||
impl Solution {
|
||||
pub fn largest_triangle_area(points: Vec<Vec<i32>>) -> f64 {
|
||||
let mut result = 0.0_f64;
|
||||
|
||||
for (a_index, a) in points.iter().enumerate() {
|
||||
for (b_index, b) in points.iter().enumerate().skip(a_index + 1) {
|
||||
for c in points.iter().skip(b_index + 1) {
|
||||
let area = Solution::area((a[0], a[1]), (b[0], b[1]), (c[0], c[1]));
|
||||
if area.is_nan() {
|
||||
continue;
|
||||
}
|
||||
result = result.max(area);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
fn distance(a: (i32, i32), b: (i32, i32)) -> f64 {
|
||||
((a.0 - b.0).pow(2) as f64 + (a.1 - b.1).pow(2) as f64).sqrt()
|
||||
}
|
||||
|
||||
fn area(a: (i32, i32), b: (i32, i32), c: (i32, i32)) -> f64 {
|
||||
let ab = Solution::distance(a, b);
|
||||
let bc = Solution::distance(b, c);
|
||||
let ac = Solution::distance(a, c);
|
||||
let s = (ab + bc + ac) / 2.0;
|
||||
|
||||
(s * (s - ab) * (s - bc) * (s - ac)).sqrt()
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user