2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线, 给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围, 给定一个数字m,表示你可以补种多少棵树。 返回补种之后,最长的连续树木,有多少棵。

答案2022-06-04:

连续补种。滑动窗口。

代码用rust编写。代码如下:

fn main() {
    let mut arr: Vec<isize> = vec![3, 9, 13, 17, 24, 36];
    let ans = longest_trees(50, 2, &mut arr);
    println!("ans = {}", ans);
}

fn longest_trees(n: isize, m: isize, arr: &mut Vec<isize>) -> isize {
    let mut ans = 0;
    let mut start = 1;
    let mut i = 0 as isize;
    let mut j = m;
    while j < arr.len() as isize {
        ans = get_max(ans, arr[j as usize] - start);
        start = arr[i as usize] + 1;
        i += 1;
        j += 1;
    }
    ans = get_max(ans, n - start + 1);
    return ans;
}

fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
    if a > b {
        a
    } else {
        b
    }
}

执行结果如下:

在这里插入图片描述


左神java代码