use std::cmp::Ordering;
fn contains_pythagorean_triplet_numbers(arr: &[i32]) -> bool {
let mut squares: Vec<i32> = arr.iter().map(|&x| x * x).collect();
squares.sort_unstable(); // built-in sort
for i in (2..squares.len()).rev() {
let mut a = 0;
let mut b = i - 1;
while a < b {
match (squares[a] + squares[b]).cmp(&squares[i]) {
Ordering::Equal => return true,
Ordering::Less => a += 1,
Ordering::Greater => b -= 1,
}
}
}
false
}
fn main() {
let input = vec![4, 7, 3, 1, 5]; // 3*3 + 4*4 = 5*5 // 9 + 16 = 25
if contains_pythagorean_triplet_numbers(&input) {
println!("The array contains a Pythagorean triplet.");
} else {
println!("The array does not contain a Pythagorean triplet.");
}
}
/*
run:
The array contains a Pythagorean triplet.
*/