@@ -98,34 +98,38 @@ \subsubsection{代码}
98
98
\begin {Code }
99
99
//LeetCode, Merge k Sorted Lists
100
100
// 时间复杂度O(n1+n2+...),空间复杂度O(1)
101
- // TODO: 会超时
102
101
class Solution {
103
102
public:
104
- ListNode *mergeKLists(vector<ListNode *> &lists) {
105
- if (lists.size() == 0) return nullptr;
106
103
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
+ }
110
116
}
111
- return p;
117
+ p->next = l1 ? l1 : l2;
118
+ return dummy.next;
112
119
}
113
120
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));
127
130
}
128
- return head.next;
131
+
132
+ return dq.front();
129
133
}
130
134
};
131
135
\end {Code }
@@ -276,7 +280,7 @@ \subsubsection{代码}
276
280
public:
277
281
int firstMissingPositive(vector<int>& nums) {
278
282
bucket_sort(nums);
279
-
283
+
280
284
for (int i = 0; i < nums.size(); ++i)
281
285
if (nums[i] != (i + 1))
282
286
return i + 1;
@@ -385,7 +389,7 @@ \subsubsection{代码3}
385
389
class Solution {
386
390
public:
387
391
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)),
389
393
nums.end(), bind1st(equal_to<int>(), 1));
390
394
}
391
395
};
0 commit comments