gpt4 book ai didi

Java 合并两个排序列表导致超出内存限制。 my 和 one of the right 有什么区别?

转载 作者:行者123 更新时间:2023-11-30 08:49:10 25 4
gpt4 key购买 nike

这是我的错误答案。我尝试将 l2 合并到 l1。我首先创建两个列表节点来引用 l1l2。使用 t1t2 进行操作。

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//find the smallest num to be first
if(l1 == null || l2 == null)
return l1==null? l2:l1;
//make t1.val < t2.val
ListNode t1 = l1.val < l2.val ? l1 :l2;
ListNode t2 = l1.val > l2.val ? l1 :l2;
ListNode head = t1;
while(t1.next != null && t2 !=null){
if(t2.val < t1.next.val){
ListNode p2 = t2;
t2 = t2.next;
p2.next = t1.next;
t1.next = p2;
}
else
t1 = t1.next;
}
t1.next = t2;
return head;
}

这是正确答案之一,有什么区别?

public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null || l2==null) return l1==null? l2 : l1;
ListNode dummy = new ListNode(0);
dummy.next = l1;
ListNode p1 = dummy;
ListNode p2 = l2;

while(p1.next!=null && p2!=null){
if(p2.val<p1.next.val){
ListNode t = p2;
p2 = p2.next;
t.next = p1.next;
p1.next = t;
}
p1 = p1.next;
}
if(p1.next == null && p2!=null) p1.next = p2;
return dummy.next;
}

最佳答案

OutOfMemoryError 当您的程序占用内存但未取消引用它时发生,因此垃圾收集器没有机会释放它。在很短的时间内,JVM 没有可用内存,无法继续执行程序,然后抛出此错误。

您的程序与“好的”替代方案之间的区别在于后者使用临时集合来存储结果。相反,您的程序将结果存储在输入集合之一中。因此,如果在每次迭代中您都将项目添加到您正在阅读的同一个集合中,那么阅读将永远不会结束。这就是为什么使用不同的集合来存储结果更安全。

关于Java 合并两个排序列表导致超出内存限制。 my 和 one of the right 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571991/

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