gpt4 book ai didi

java - Java TreeSet 使用的内存是否比 PriorityQueue 少?

转载 作者:行者123 更新时间:2023-12-02 02:04:15 27 4
gpt4 key购买 nike

我正在这样做Question首先使用 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 堆空间错误。
用TreeSet替换PriorityQueue后,解决方案被接受:-

 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 ;
}

最佳答案

这与数据结构无关。第一种情况的参数组合可能导致该陈述永远不成立:

if(list.size() == 0 || list.get(list.size() - 1) != val)

这意味着循环永远不会终止,并且对象 q 会不断增长,直到内存耗尽。例如尝试调用:

求解(1,1,2,5)

两种数据结构之间的内存差异在这种情况下没有影响。需要注意与随机访问和下一个/上一个指针相关的一些差异,但与此处无关。

关于java - Java TreeSet 使用的内存是否比 PriorityQueue 少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51045605/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com