rustgym/leetcode/
_1183_maximum_number_of_ones.rs1struct 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}