23. Merge k Sorted Lists 合并链表并排序
收获:同样使用分治法,使用interval自底向上归并排序的用时为28ms,低于使用递归自顶向下用时为44ms,
应该还是递归造成的时间差吧,c++代码如下。
###使用interval自底向上
ListNode* mergeKLists(vector<ListNode*>& lists){
int len = lists.size();
if (len == 0) return NULL;
int interval = 1;
while (interval < len) {
for (int i = 0; i < len - interval; i += interval * 2) {
lists[i] = mergeTwoLists(lists[i], lists[i + interval]);
}
interval *= 2;
}
return lists[0];
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {//这里一样,不粘了就}
###使用递归自顶向下
ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.size() == 0) return NULL;
int l = 0;
int h = lists.size()-1;
return merge(lists, l, h);
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { }
ListNode* merge(vector<ListNode*>& lists, int low, int high) {
if (low == high) return lists[low];
int mid = (low + high) / 2;
ListNode* l = merge(lists, low, mid);
ListNode* h = merge(lists, mid + 1, high);
return mergeTwoLists(l, h);
}
##############################分割线##################################
28. Implement strStr() 查找字符串子串
收获:1)循环注意结束条件,主串遍历只需至(len(主串)-len(子串))
2)KMP算法