Я делал это Вопрос и сначала решил его, используя PriorityQueue: -
public ArrayList<Integer> solve(int A, int B, int C, int D) {
PriorityQueue<Integer> q = new PriorityQueue<>();
q.add(A);
q.add(B);
q.add(C);
ArrayList<Integer> list = new ArrayList<>();
while(list.size() < D){
int val = q.poll();
if(list.size() == 0 || list.get(list.size() - 1) != val)
list.add(val);
q.add(val*A);
q.add(val*B);
q.add(val*C);
}
list.sort(null);
return list;
}
но он выдал java.lang.OutOfMemoryError: ошибка пространства кучи Java.
После замены PriorityQueue на TreeSet решение было принято: -
public ArrayList<Integer> solve(int A, int B, int C, int D) {
ArrayList<Integer> res = new ArrayList<>() ;
TreeSet<Integer> set = new TreeSet<>() ;
set.add(A) ;
set.add(B) ;
set.add(C) ;
for(int i = 0; i < D; i++) {
int temp = set.first() ;
set.remove(temp) ;
res.add(temp) ;
set.add(temp*A) ;
set.add(temp*B) ;
set.add(temp*C) ;
}
return res ;
}