rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn max_subarray_sum_circular(a: Vec<i32>) -> i32 {
        let n = a.len();
        let sum = a.iter().sum::<i32>();
        let mut prev_min = 0;
        let mut prev_max = 0;
        let mut min = std::i32::MAX;
        let mut max = std::i32::MIN;
        for i in 0..n {
            prev_min = a[i].min(prev_min + a[i]);
            min = min.min(prev_min);
            prev_max = a[i].max(prev_max + a[i]);
            max = max.max(prev_max);
        }
        if max < 0 {
            max
        } else {
            max.max(sum - min)
        }
    }
}

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