Construct Target Array With Multiple Sums LeetCode solution in Rust

1
type Num = u64;
2

3
use std::collections::BinaryHeap;
4

5
impl Solution {
6
fn preproc(vec: Vec<i32>) -> Vec<Num> {
7
vec.into_iter().map(|e| e as Num).collect::<Vec<_>>()
8
}
9

10
pub fn is_possible(vec: Vec<i32>) -> bool {
11
let vec = Self::preproc(vec);
12

13
let mut heap_sum = vec.iter().sum::<Num>();
14
let mut heap = BinaryHeap::from(vec);
15
while let Some(e) = heap.pop() {
16
heap_sum -= e;
17
if e <= heap_sum || heap_sum < 1 {
18
heap.push(e);
19
break;
20
}
21

22
let mut e_next = e % heap_sum;
23
if e_next < 1 {
24
e_next += heap_sum;
25
}
26

27
heap_sum += e_next;
28
heap.push(e_next);
29
}
30

31
heap.into_iter().filter(|&e| e != 1).count() < 1
32
}
33
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0