LeetCode 23 合併K個排序鍊錶

2021-10-04 09:22:19 字數 1280 閱讀 3525

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

解題思路:合併k個鍊錶可以先合併兩個鍊錶,然後反覆的將k個鍊錶折半,在折半的過程中,需要考慮待合併的鍊錶數的奇偶性,這裡參考了網友grandyang的寫法,從(n + 1) / 2開始合併,然後下一次需要合併的鍊錶長度也即為(n + 1) / 2,將鍊錶的奇偶數統一處理了。時間複雜度為o(l

ogn)

o(logn)

o(logn

).

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

elseif(

!res)

else

}while

(heada)

while

(headb)

return res;

} listnode*

mergeklists

(vector

>

& lists)

n = m;

}return lists[0]

;}};

上面的**在兩個鍊錶的合併過程中,是通過建立新節點合併鍊錶的,下面寫乙個直接摘取鍊錶上節點的合併鍊錶。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else}if

(heada) cur-

>next = heada;

if(headb) cur-

>next = headb;

listnode *res = dummy-

>next;

delete dummy;

return res;

} listnode*

mergeklists

(vector

>

& lists)

n = m;

}return lists[0]

;}};

分治實現LeetCode 23題 合併K個排序鍊錶

紀念第一道沒有看題解做出來的困難題 分治思想 歸併排序實現合併k個排序鍊錶 由於是實現一連串已經排序的鍊錶,所以第一時間想到了歸併排序 又由於是實現多個鍊錶的總排序,為了減少時間複雜度又想到了分治思想,這一題中也就是二分法 做了這麼多天的題總算有點進步 class solution 結果陣列的頭結點...

LeetCode 23 合併 K個排序序列

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解題思路 採用分治的思想,將 k 個鍊錶的合併問題轉換成,合併 2 個有序鍊錶的問題 typedef struct listnode list 定...

Leetcode23 合併K個排序鍊錶

題目 解題思路 這道題使用的是分治演算法。首先還用輔助函式mergetwolists 用來合併兩個有序單鏈表,不申請額外的空間實現原地合併。如下 listnode mergetwolists listnode l1,listnode l2 else head nexthead while l1 nu...