pub fn find_saddle_points(input: &[Vec<u64>]) -> Vec<(usize, usize)> {
    let (width, height) = match (input.len(), input[0].len()) {
        (0, _) | (_, 0) => return Vec::new(),
        (n, k) => (n, k),
    };

    let mut saddle_points = Vec::new();

    for i in 0..width {
        let row_max = input[i].iter().max().unwrap();

        for j in 0..height {
            let column_min = input.iter().map(|x| x[j]).min().unwrap();

            let value = input[i][j];

            if value == *row_max && value == column_min {
                saddle_points.push((i, j));
            }
        }
    }

    saddle_points
}

pub fn find_saddle_points(input: &[Vec<u64>]) -> Vec<(usize, usize)> {
    let mut saddle_points = Vec::new();

    let width = input.len();
    let height = input[0].len();

    for i in 0..width {
        for j in 0..height {
            let column = input.iter().map(|x| x[j]).collect::<Vec<u64>>();
            let row = &input[i];

            let max = row.iter().max().unwrap();
            let min = column.iter().min().unwrap();

            let value = input[i][j];

            if value >= *max && value <= *min {
                saddle_points.push((i, j));
            }
        }
    }
    saddle_points
}

--- 
+++ 
@@ -1,23 +1,24 @@
 pub fn find_saddle_points(input: &[Vec<u64>]) -> Vec<(usize, usize)> {
+    let (width, height) = match (input.len(), input[0].len()) {
+        (0, _) | (_, 0) => return Vec::new(),
+        (n, k) => (n, k),
+    };
+
     let mut saddle_points = Vec::new();
 
-    let width = input.len();
-    let height = input[0].len();
+    for i in 0..width {
+        let row_max = input[i].iter().max().unwrap();
 
-    for i in 0..width {
         for j in 0..height {
-            let column = input.iter().map(|x| x[j]).collect::<Vec<u64>>();
-            let row = &input[i];
-
-            let max = row.iter().max().unwrap();
-            let min = column.iter().min().unwrap();
+            let column_min = input.iter().map(|x| x[j]).min().unwrap();
 
             let value = input[i][j];
 
-            if value >= *max && value <= *min {
+            if value == *row_max && value == column_min {
                 saddle_points.push((i, j));
             }
         }
     }
+
     saddle_points
 }
Optimize saddle-points; use idiomatic rust
