今天刷leetcode时,明明算法思路都是按照题解写的,但就是一些小的用例过不去,其实算法复杂度已经是和题解一样了,其实之前也有过这种情况,是因为算法整体复杂度虽然还可以,但是如果一些小的地方处理的不够好,就会增加运行时间,这就导致了一些小的用例超出时间限制,如果想不出来可以看一下题解,然后再优化一下。看下面只是优化了一下if,就跑过去了。
优化前:
public static ListNode merge(ListNode listHead1,ListNode listHead2){
ListNode head;
ListNode point;
if(listHead1.val>listHead2.val){
head=listHead2;
point=listHead2;
}else{
head=listHead1;
point=listHead1;
}
while(listHead1!=null&&listHead2!=null){
if(listHead1.val>listHead2.val){
point.next=listHead2;
listHead2=listHead2.next;
}else{
point.next=listHead1;
listHead1=listHead1.next;
}
point=point.next;
}
if(listHead1==null){
point.next=listHead2;
}else{
point.next=listHead1;
}
return head;
}
优化后:
public static ListNode merge(ListNode listHead1,ListNode listHead2){
ListNode head=new ListNode();
ListNode point;
point=head;
/*if(listHead1.val>listHead2.val){
head=listHead2;
point=listHead2;
}else{
head=listHead1;
point=listHead1;
}*/
while(listHead1!=null&&listHead2!=null){
if(listHead1.val>listHead2.val){
point.next=listHead2;
listHead2=listHead2.next;
}else{
point.next=listHead1;
listHead1=listHead1.next;
}
point=point.next;
}
if(listHead1==null){
point.next=listHead2;
}else{
point.next=listHead1;
}
return head.next;
}
这样就通过这个用例了.