Skip to content

Commit 3f2272a

Browse files
committed
Merge pull request soulmachine#81 from lxieyang/master
Revised Merging k Sorted Lists
2 parents 1e76a18 + d4ee008 commit 3f2272a

File tree

1 file changed

+27
-23
lines changed

1 file changed

+27
-23
lines changed

C++/chapSorting.tex

+27-23
Original file line numberDiff line numberDiff line change
@@ -98,34 +98,38 @@ \subsubsection{代码}
9898
\begin{Code}
9999
//LeetCode, Merge k Sorted Lists
100100
// 时间复杂度O(n1+n2+...),空间复杂度O(1)
101-
// TODO: 会超时
102101
class Solution {
103102
public:
104-
ListNode *mergeKLists(vector<ListNode *> &lists) {
105-
if (lists.size() == 0) return nullptr;
106103

107-
ListNode *p = lists[0];
108-
for (int i = 1; i < lists.size(); i++) {
109-
p = mergeTwoLists(p, lists[i]);
104+
ListNode * mergeTwo(ListNode * l1, ListNode * l2){
105+
if(!l1) return l2;
106+
if(!l2) return l1;
107+
ListNode dummy(-1);
108+
ListNode * p = &dummy;
109+
for(; l1 && l2; p = p->next){
110+
if(l1->val > l2->val){
111+
p->next = l2; l2 = l2->next;
112+
}
113+
else{
114+
p->next = l1; l1 = l1->next;
115+
}
110116
}
111-
return p;
117+
p->next = l1 ? l1 : l2;
118+
return dummy.next;
112119
}
113120

114-
// Merge Two Sorted Lists
115-
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
116-
ListNode head(-1);
117-
for (ListNode* p = &head; l1 != nullptr || l2 != nullptr; p = p->next) {
118-
int val1 = l1 == nullptr ? INT_MAX : l1->val;
119-
int val2 = l2 == nullptr ? INT_MAX : l2->val;
120-
if (val1 <= val2) {
121-
p->next = l1;
122-
l1 = l1->next;
123-
} else {
124-
p->next = l2;
125-
l2 = l2->next;
126-
}
121+
ListNode* mergeKLists(vector<ListNode*>& lists) {
122+
if(lists.size() == 0) return nullptr;
123+
124+
// multi pass
125+
deque<ListNode *> dq(lists.begin(), lists.end());
126+
while(dq.size() > 1){
127+
ListNode * first = dq.front(); dq.pop_front();
128+
ListNode * second = dq.front(); dq.pop_front();
129+
dq.push_back(mergeTwo(first,second));
127130
}
128-
return head.next;
131+
132+
return dq.front();
129133
}
130134
};
131135
\end{Code}
@@ -276,7 +280,7 @@ \subsubsection{代码}
276280
public:
277281
int firstMissingPositive(vector<int>& nums) {
278282
bucket_sort(nums);
279-
283+
280284
for (int i = 0; i < nums.size(); ++i)
281285
if (nums[i] != (i + 1))
282286
return i + 1;
@@ -385,7 +389,7 @@ \subsubsection{代码3}
385389
class Solution {
386390
public:
387391
void sortColors(vector<int>& nums) {
388-
partition(partition(nums.begin(), nums.end(), bind1st(equal_to<int>(), 0)),
392+
partition(partition(nums.begin(), nums.end(), bind1st(equal_to<int>(), 0)),
389393
nums.end(), bind1st(equal_to<int>(), 1));
390394
}
391395
};

0 commit comments

Comments
 (0)