rust 算法题求优化之 列表的减法
编写一个 array_diff 函数,以两个列表为参数,从一个列表中减去另一个,即如下:
array_diff(vec![1,2], vec![1]) == vec![2]
// 如果被减的列表中要删除的数有重复,则会一齐删除重复的
array_diff(vec![1,2,2,2,3], vec![2]) == vec![1,3]
我的代码是:
fn array_diff<T: PartialEq>(a: Vec<T>, b: Vec<T>) -> Vec<T> {
let mut lb = b.iter();
let mut a = a;
loop {
match lb.next() {
Some(b_item) => {
let len_a = a.len();
for i in (0..=len_a).rev() {
if Some(b_item) == a.get(i) {
a.remove(i as usize);
}
}
}
None => break,
}
}
a
}
代码不尽人意,还请指正改进。
关于 LearnKu
你好,如果函数头是一样的话,这个题属于比较简单的类型,你的做法虽然没有问题,但是却会把简单问题复杂化,如果我们采用你发的上一题下我的回答中的那种做法(也就是闭包和用以简化的函数),应该会产生很简洁的代码,我提供这么一个:
经过上一题,你应该看得懂这个吧?