合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。
示例:輸入:
[
1->4->5,
1->3->4,
2->6
]
輸出:
1->1->2->3->4->4->5->6
首先,暴力破解
listnode* mergeklists(vector& lists)
}std::sort(longlist.begin(),longlist.end(),(auto x,auto y));
if (longlist.size() ==0)
for (size_t i=0;inext = longlist[i+1];
}longlist[longlist.size()-1]->next = null;
return longlist[0];
其次,參考昨天的演算法,始終將最小的數排在最後
class solution
return prehead->next;}};
這裡函式沒有寫出來,但大致是這個思路
接下來是官方演算法,分治法
50道演算法題(1 50)
題目 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 ...
50道演算法題(2 50)
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0示例 2 nums1 1,2 n...
50道演算法題(5 50)
請你來實現乙個 atoi 函式,使其能將字串轉換成整數。首先,該函式會根據需要丟棄無用的開頭空格字元,直到尋找到第乙個非空格的字元為止。當我們尋找到的第乙個非空字元為正或者負號時,則將該符號與之後面盡可能多的連續數字組合起來,作為該整數的正負號 假如第乙個非空字元是數字,則直接將其與之後連續的數字字...