rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::VecDeque;

impl Solution {
    fn shortest_subarray(a: Vec<i32>, k: i32) -> i32 {
        let n = a.len();
        let mut queue: VecDeque<usize> = VecDeque::new();
        let mut prefix = vec![0; n + 1];
        queue.push_back(0);
        let mut res = std::usize::MAX;
        for i in 0..n {
            prefix[i + 1] = prefix[i] + a[i];
            while let Some(&j) = queue.front() {
                if prefix[i + 1] - prefix[j] >= k {
                    res = res.min(i + 1 - j);
                    queue.pop_front();
                } else {
                    break;
                }
            }
            while let Some(&j) = queue.back() {
                if prefix[i + 1] <= prefix[j] {
                    queue.pop_back();
                } else {
                    break;
                }
            }
            queue.push_back(i + 1);
        }
        if res == std::usize::MAX {
            -1
        } else {
            res as i32
        }
    }
}

#[test]
fn test() {
    let a = vec![1];
    let k = 1;
    let res = 1;
    assert_eq!(Solution::shortest_subarray(a, k), res);
    let a = vec![1, 2];
    let k = 4;
    let res = -1;
    assert_eq!(Solution::shortest_subarray(a, k), res);
    let a = vec![2, -1, 2];
    let k = 3;
    let res = 3;
    assert_eq!(Solution::shortest_subarray(a, k), res);
}