rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

impl Solution {
    fn prev_perm_opt1(mut a: Vec<i32>) -> Vec<i32> {
        let n = a.len();
        if n < 2 {
            return a;
        }
        let mut i = n - 2;
        while i > 0 && a[i] <= a[i + 1] {
            i -= 1;
        }
        if i == 0 && a[0] <= a[1] {
            return a;
        }
        let mut j = n - 1;
        while a[j] >= a[i] || a[j] == a[j - 1] {
            j -= 1;
        }
        a.swap(i, j);
        a
    }
}

#[test]
fn test() {
    let a = vec![3, 2, 1];
    let res = vec![3, 1, 2];
    assert_eq!(Solution::prev_perm_opt1(a), res);
    let a = vec![1, 1, 5];
    let res = vec![1, 1, 5];
    assert_eq!(Solution::prev_perm_opt1(a), res);
    let a = vec![1, 9, 4, 6, 7];
    let res = vec![1, 7, 4, 6, 9];
    assert_eq!(Solution::prev_perm_opt1(a), res);
    let a = vec![3, 1, 1, 3];
    let res = vec![1, 3, 1, 3];
    assert_eq!(Solution::prev_perm_opt1(a), res);
}