我有一份铅笔清单和一个橡皮清单。目标是检查所有的橡皮是否可以放在铅笔上。一个橡皮可能适合多支不同的铅笔。每支铅笔最多只能有一个橡皮。
如果我只是循环遍历所有的橡皮,并将它们放在铅笔上,最终会出现一些橡皮无法放在任何未被占用的铅笔上,而实际上有一种解决方案可以让所有橡皮都放在铅笔上。
我应该使用什么算法来找到一个组合,以便所有的橡皮都能放在铅笔上?
如果我只是循环遍历所有的橡皮,并将它们放在铅笔上,最终会出现一些橡皮无法放在任何未被占用的铅笔上,而实际上有一种解决方案可以让所有橡皮都放在铅笔上。
我应该使用什么算法来找到一个组合,以便所有的橡皮都能放在铅笔上?
public class Eraser(){
public boolean matches(Pencil p){
//unimportant
}
}
public class Pencil(){
}
My attempt
public boolean doMatch(List<Eraser> erasers, List<Pencil> pencils){
for (Eraser e : erasers) {
boolean found = false;
Iterator it = pencils.iterator();
while (it.hasNext()) {
Pencil p = (Pencil) it.next();
if (e.matches(p)) {
found = true;
it.remove();
break;
}
}
if (!found) {
return false;
}
}
return true;
}