2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线,给定一个有序数组arr,表示现在哪些树已经没了

2023-06-08 14:21:29 浏览数 (1)

2022-06-04:给定一个数字n,表示一开始有编号1~n的树木,列成一条直线,

给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围,

给定一个数字m,表示你可以补种多少棵树。

返回补种之后,最长的连续树木,有多少棵。

答案2022-06-04:

连续补种。滑动窗口。

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

代码语言:javascript复制
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代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_03_4_week/Code06_LongestContinuousTrees.java)

0 人点赞