rustgym/leetcode/
_1183_maximum_number_of_ones.rs

1struct Solution;
2use std::cmp::Reverse;
3use std::collections::BinaryHeap;
4
5impl Solution {
6    fn maximum_number_of_ones(width: i32, height: i32, side_length: i32, max_ones: i32) -> i32 {
7        let width = width as usize;
8        let height = height as usize;
9        let side_length = side_length as usize;
10        let max_ones = max_ones as usize;
11        let mut queue: BinaryHeap<Reverse<usize>> = BinaryHeap::new();
12        for i in 0..side_length {
13            for j in 0..side_length {
14                let rows = 1 + (height - (i + 1)) / side_length;
15                let cols = 1 + (width - (j + 1)) / side_length;
16                queue.push(Reverse(rows * cols));
17                if queue.len() > max_ones {
18                    queue.pop();
19                }
20            }
21        }
22        queue.into_iter().map(|t| t.0).sum::<usize>() as i32
23    }
24}
25
26#[test]
27fn test() {
28    let width = 3;
29    let height = 3;
30    let side_length = 2;
31    let max_ones = 1;
32    let res = 4;
33    assert_eq!(
34        Solution::maximum_number_of_ones(width, height, side_length, max_ones),
35        res
36    );
37    let width = 3;
38    let height = 3;
39    let side_length = 2;
40    let max_ones = 2;
41    let res = 6;
42    assert_eq!(
43        Solution::maximum_number_of_ones(width, height, side_length, max_ones),
44        res
45    );
46}