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

2021-10-05 11:45:52 字數 882 閱讀 6391

紀念第一道沒有看題解做出來的困難題

分治思想+歸併排序實現合併k個排序鍊錶

由於是實現一連串已經排序的鍊錶,所以第一時間想到了歸併排序

又由於是實現多個鍊錶的總排序,為了減少時間複雜度又想到了分治思想,這一題中也就是二分法

做了這麼多天的題總算有點進步

class solution 

//結果陣列的頭結點

//listnode res = new listnode(0);

listnode res = mergeklists(lists, 0, len-1);

return res;

}private listnode mergeklists(listnode lists, int left, int right)

int mid = left + (right - left)/2;

listnode leftlist = mergeklists(lists, left, mid);

listnode rightlist = mergeklists(lists, mid+1, right);

return mergesort(leftlist, rightlist);

}private listnode mergesort(listnode leftlist, listnode rightlist) else

} if(leftlist == null) temp.next = rightlist;

if(rightlist == null) temp.next = leftlist;

system.out.println(res.next.val);

return res.next;

}}

分治 leetcode 23 合併K個公升序鍊錶

題目鏈結 給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。示例1 輸入 lists 1,4,5 1,3,4 2,6 輸出 1,1,2,3,4,4,5,6 解釋 鍊錶陣列如下 1 4 5,1 3 4,2 6 將它們合併到乙個有序鍊錶中得到。1 1 ...

leetcode23合併K個鍊錶 高頻題

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 乙個較為合適的方法,即最小堆來做。先存在lists.length個數的最小堆,每次取最小的元素出來,再鏈上新的鍊錶。definition for ...

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 定...