我有以下代码:
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
为负的情况:您的代码会像编写的那样死机。