如何让.max()返回i32数据类型



我有以下代码:

impl Solution {

pub fn max_sliding_window(nums: Vec<i32>, k: i32) -> Vec<i32> {
let mut result = vec![];
for i in 0..nums.len() as i32 - (k - 1) {
//println!("{}", nums[i as usize..(i + k) as usize].iter().max());
result.push(nums[i as usize..(i + k) as usize].iter().max());
}
return result;
}
}

我想返回从nums向量开始到结束的每个k大小窗口的最大值。但是,.iter().max()表单返回的是std::option::Option类型,而不是i32类型。我也尝试过as i32,但这是不允许的。如何解决此问题?

max()返回一个Option,因为在空迭代器的情况下没有可返回的值。

在这种情况下,您需要处理Option并提供一些合理的内容。例如0:

pub fn max_sliding_window(nums: Vec<i32>, k: i32) -> Vec<i32> {
let mut result = vec![];
for i in 0..nums.len() as i32 - (k - 1) {
result.push(
nums[i as usize..(i + k) as usize]
.iter()
.max()
.copied() // because the iterator is over &i32 and you need i32
.unwrap_or(0),
);
}
return result;
}

n.b.正如Denys Séguret在上面评论的那样,您还需要正确处理k为负的情况:您的代码会像编写的那样死机。

最新更新