面试题答案
一键面试常规操作的性能问题
push
和pop
:push
和pop
操作在向量尾部进行,对于偶尔删除向量尾部元素的操作,pop
是高效的,时间复杂度为 O(1)。但本题需求重点在于频繁在头部插入,push
对此场景无用。insert
:insert
方法用于在向量指定位置插入元素,在头部插入新元素时,时间复杂度为 O(n),因为插入新元素后,后续所有元素都需要移动位置,随着向量规模增大,性能会显著下降。
优化方案
使用 std::collections::VecDeque
双端队列来代替 Vec
。VecDeque
允许在两端高效地插入和删除元素,在头部插入(push_front
)和尾部删除(pop_back
)的时间复杂度均为 O(1)。
示例代码
use std::collections::VecDeque;
fn main() {
let mut deque: VecDeque<i32> = VecDeque::new();
// 频繁在头部插入新元素
for i in 0..10 {
deque.push_front(i);
}
// 偶尔删除向量尾部元素
if let Some(removed) = deque.pop_back() {
println!("Removed element: {}", removed);
}
// 打印双端队列
println!("Current deque: {:?}", deque);
}