@@ -101,31 +101,36 @@ \subsubsection{代码}
101101// TODO: 会超时
102102class Solution {
103103public:
104- ListNode *mergeKLists(vector<ListNode *> &lists) {
105- if (lists.size() == 0) return nullptr;
106104
107- ListNode *p = lists[0];
108- for (int i = 1; i < lists.size(); i++) {
109- p = mergeTwoLists(p, lists[i]);
105+ ListNode * mergeTwo(ListNode * l1, ListNode * l2){
106+ if(!l1) return l2;
107+ if(!l2) return l1;
108+ ListNode dummy(-1);
109+ ListNode * p = &dummy;
110+ for(; l1 && l2; p = p->next){
111+ if(l1->val > l2->val){
112+ p->next = l2; l2 = l2->next;
113+ }
114+ else{
115+ p->next = l1; l1 = l1->next;
116+ }
110117 }
111- return p;
118+ p->next = l1 ? l1 : l2;
119+ return dummy.next;
112120 }
113121
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- }
122+ ListNode* mergeKLists(vector<ListNode*>& lists) {
123+ if(lists.size() == 0) return nullptr;
124+
125+ // multi pass
126+ deque<ListNode *> dq(lists.begin(), lists.end());
127+ while(dq.size() > 1){
128+ ListNode * first = dq.front(); dq.pop_front();
129+ ListNode * second = dq.front(); dq.pop_front();
130+ dq.push_back(mergeTwo(first,second));
127131 }
128- return head.next;
132+
133+ return dq.front();
129134 }
130135};
131136\end {Code }
@@ -276,7 +281,7 @@ \subsubsection{代码}
276281public:
277282 int firstMissingPositive(vector<int>& nums) {
278283 bucket_sort(nums);
279-
284+
280285 for (int i = 0; i < nums.size(); ++i)
281286 if (nums[i] != (i + 1))
282287 return i + 1;
@@ -385,7 +390,7 @@ \subsubsection{代码3}
385390class Solution {
386391public:
387392 void sortColors(vector<int>& nums) {
388- partition(partition(nums.begin(), nums.end(), bind1st(equal_to<int>(), 0)),
393+ partition(partition(nums.begin(), nums.end(), bind1st(equal_to<int>(), 0)),
389394 nums.end(), bind1st(equal_to<int>(), 1));
390395 }
391396};
0 commit comments