给定一个数字n,表示一开始有编号1~n的树木,列成一条直线,
给定一个有序数组arr,表示现在哪些树已经没了,arr[i]一定在[1,n]范围,
给定一个数字m,表示你可以补种多少棵树。
返回补种之后,最长的连续树木,有多少棵。
连续补种。滑动窗口。
代码用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
}
}
执行结果如下: