pub fn max_sliding_window(list: &[i32], k: usize) -> Result<Vec<i32>,String> {
if list.is_empty() {
return Err("Cannot use max_sliding_window on an empty list!".to_string());
}
let mut index_dequeue: std::collections::VecDeque<usize> = std::collections::VecDeque::new();
let mut result: Vec<i32> = Vec::new();
for (i, &value) in list.iter().enumerate() {
while let Some(&idx) = index_dequeue.back() {
if list[idx] < value {
index_dequeue.pop_back();
} else {
break;
}
}
index_dequeue.push_back(i);
if let Some(&front) = index_dequeue.front() {
if front + k <= i {
index_dequeue.pop_front();
}
}
if i + 1 >= k {
if let Some(&front) = index_dequeue.front() {
result.push(list[front]);
}
}
}
Ok(result)
}