国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【力扣每日一題】2023.8.12 合并K個升序鏈表

這篇具有很好參考價值的文章主要介紹了【力扣每日一題】2023.8.12 合并K個升序鏈表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

題目:

示例:

分析:

代碼:


題目:

【力扣每日一題】2023.8.12 合并K個升序鏈表,力扣每日一題,leetcode,鏈表,算法,c++,數(shù)據(jù)結(jié)構(gòu)

示例:

【力扣每日一題】2023.8.12 合并K個升序鏈表,力扣每日一題,leetcode,鏈表,算法,c++,數(shù)據(jù)結(jié)構(gòu)

分析:

題目給我們一個鏈表數(shù)組,數(shù)組里的鏈表都是升序的,讓我們合并這些鏈表,要求合并之后還是升序的。

最簡單最直觀的做法就是遍歷整個數(shù)組,把每個鏈表的節(jié)點都取出來塞到一個容器里,然后對容器進行升序排序,接著按順序重新串連成新的鏈表就可以。

我本以為這么做有些暴力,不太好,結(jié)果:

【力扣每日一題】2023.8.12 合并K個升序鏈表,力扣每日一題,leetcode,鏈表,算法,c++,數(shù)據(jù)結(jié)構(gòu)

?emmm。。。。

也沒什么不好的,最高端的食材往往只需要最簡單的烹飪方式,最困難的題目往往只需要最樸素的解法。

那除了這個取出來再排序的“暴力”解法,那還有一種就是不用我們親自去“暴力”的方法。

那就是利用小頂堆的堆頂永遠(yuǎn)是堆內(nèi)的最小元素這一特性,我們把元素全部塞進小頂堆。

接著進入while循環(huán),只要堆不為空,那我就把堆頂取出來接到新鏈表后。

最后一樣也是可以獲取到一條升序的鏈表。

【力扣每日一題】2023.8.12 合并K個升序鏈表,力扣每日一題,leetcode,鏈表,算法,c++,數(shù)據(jù)結(jié)構(gòu)

兩種解法沒什么本質(zhì)上的區(qū)別,不同的就是第一種我們手動去排序了,第二種是人家?guī)臀覀內(nèi)ヅ判蛄恕]啥本質(zhì)上的區(qū)別,運行的結(jié)果也是一樣的。

既然這種偏“暴力”的解法都還解得不錯,那么用這種“暴力”解法就好了。

如果一定要利用到原本鏈表就升序的這個特性的話,也可以。

我們先進入while循環(huán),循環(huán)的條件是整個原數(shù)組里的鏈表至少有一個不為空指針節(jié)點。

接著進入一層for循環(huán),去尋找數(shù)組里那個鏈表頭的值最?。ú晃ㄒ唬又阉〕鰜矸诺叫骆湵淼暮竺?,再把這個鏈表往后移動。

直到原數(shù)組里的鏈表都變成了空指針節(jié)點,那么我們就是合并完成了。

我個人覺得還不如上面的兩種“暴力”解法簡單。

不過思路提供給大家了,怎么做都可以,黑貓白貓能抓老鼠的都是好貓。文章來源地址http://www.zghlxwxcb.cn/news/detail-643866.html

代碼:

class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        //把節(jié)點塞到一個容器里排序后重新連接成鏈表
        vector<ListNode*>cache;
        for(auto list:lists){
            while(list){
                cache.push_back(list);
                list=list->next;
            }
        }
        sort(cache.begin(),cache.end(),[](auto a,auto b){return a->val<b->val;});
        ListNode* res=new ListNode(0);
        ListNode* cur=res;
        for(ListNode* node:cache){
            cur->next=node;
            cur=cur->next;
        }
        cur->next=nullptr;
        return res->next;
        
        //把節(jié)點塞到一個小頂堆里,然后生成鏈表
        auto cmp=[](auto a,auto b){return a->val>b->val;};
        priority_queue<ListNode*,vector<ListNode*>,decltype(cmp)>minpq;
        for(auto list:lists){
            while(list){
                minpq.push(list);
                list=list->next;
            }
        }
        ListNode* res=new ListNode(0);
        ListNode* cur=res;
        while(!minpq.empty()){
            cur->next=minpq.top();
            minpq.pop();
            cur=cur->next;
        }
        cur->next=nullptr;
        return res->next;
    }
};

到了這里,關(guān)于【力扣每日一題】2023.8.12 合并K個升序鏈表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 2023-07-12力扣每日一題

    鏈接: 2544. 交替數(shù)字和 題意: 一個數(shù)字字符串,根據(jù)符號求和,符號規(guī)律+ - + - +… 解: 簡單題,遍歷 實際代碼: 手寫: 函數(shù)!小子: 限制: 1 = n = 109

    2024年02月15日
    瀏覽(29)
  • 【力扣每日一題】2023.8.13 合并兩個有序數(shù)組

    【力扣每日一題】2023.8.13 合并兩個有序數(shù)組

    目錄 題目: 示例: 分析: 代碼: 題目給我們兩個升序數(shù)組,讓我們合并它們,要求合并之后仍然是升序,并且這個合并操作是在數(shù)組1原地修改的。數(shù)組1的有效數(shù)據(jù)長度為 m ,而數(shù)組1的長度為 m + n,n 是數(shù)組2的有效數(shù)據(jù)長度以及數(shù)組的長度。 比較直觀容易想到的做法就是

    2024年02月12日
    瀏覽(26)
  • 【力扣每日一題】2023.7.30 環(huán)形鏈表2

    【力扣每日一題】2023.7.30 環(huán)形鏈表2

    這道題屬于是那種知道解法就很簡單,不知道解法就很難獨立想出來的那種,我們只需要稍微記住這類題的固定解法就可以。 所以接下來我先說解法,再解釋為什么解法可以解出來。 那么我們都知道使用快慢指針可以找出一個鏈表是否有環(huán)(不知道的去看看我昨天的每日一

    2024年02月14日
    瀏覽(14)
  • (鏈表) 劍指 Offer 25. 合并兩個排序的鏈表 ——【Leetcode每日一題】

    (鏈表) 劍指 Offer 25. 合并兩個排序的鏈表 ——【Leetcode每日一題】

    難度:簡單 輸入兩個遞增排序的鏈表,合并這兩個鏈表并使新鏈表中的節(jié)點仍然是遞增排序的。 示例1: 輸入:1-2-4, 1-3-4 輸出:1-1-2-3-4-4 限制 : 0 = 鏈表長度 = 1000 注意:本題與 21. 合并兩個有序鏈表 相同 ??思路: 法一:遞歸 將該問題可以分解成子鏈表,只比較當(dāng)前 l1 鏈

    2024年02月15日
    瀏覽(21)
  • 2023-08-27 LeetCode每日一題(合并區(qū)間)

    2023-08-27 LeetCode每日一題(合并區(qū)間)

    點擊跳轉(zhuǎn)到題目位置 以數(shù)組 intervals 表示若干個區(qū)間的集合,其中單個區(qū)間為 intervals[i] = [starti, endi] 。請你合并所有重疊的區(qū)間,并返回 一個不重疊的區(qū)間數(shù)組,該數(shù)組需恰好覆蓋輸入中的所有區(qū)間 。 示例 1: 示例 2: 提示: 1 = intervals.length = 10 4 intervals[i].length == 2 0 = s

    2024年02月10日
    瀏覽(28)
  • 2023-08-13 LeetCode每日一題(合并兩個有序數(shù)組)

    2023-08-13 LeetCode每日一題(合并兩個有序數(shù)組)

    點擊跳轉(zhuǎn)到題目位置 給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 **注意:**最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 num

    2024年02月13日
    瀏覽(28)
  • 2023-07-31 LeetCode每日一題(重排鏈表)

    2023-07-31 LeetCode每日一題(重排鏈表)

    點擊跳轉(zhuǎn)到題目位置 給定一個單鏈表 L 的頭節(jié)點 head ,單鏈表 L 表示為: 請將其重新排列后變?yōu)椋?不能只是單純的改變節(jié)點內(nèi)部的值,而是需要實際的進行節(jié)點交換。 示例 1: 示例 2: 提示: 鏈表的長度范圍為 [1, 5 * 10 4 ] 1 = node.val = 1000 (1) 使用 分治 的思路來解決問題。

    2024年02月14日
    瀏覽(21)
  • 2023-07-29 LeetCode每日一題(環(huán)形鏈表)

    點擊跳轉(zhuǎn)到題目位置 給你一個鏈表的頭節(jié)點 head ,判斷鏈表中是否有環(huán)。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。注意:p

    2024年02月15日
    瀏覽(27)
  • LeetCode每日一題:56. 合并區(qū)間(2023.8.27 C++)

    目錄 56. 合并區(qū)間 題目描述: 實現(xiàn)代碼與解析: 排序 + 貪心 原理思路: ????????以數(shù)組? intervals ?表示若干個區(qū)間的集合,其中單個區(qū)間為? intervals[i] = [starti, endi] ?。請你合并所有重疊的區(qū)間,并返回? 一個不重疊的區(qū)間數(shù)組,該數(shù)組需恰好覆蓋輸入中的所有區(qū)間 ?。

    2024年02月11日
    瀏覽(16)
  • 2023-07-30 LeetCode每日一題(環(huán)形鏈表 II)

    2023-07-30 LeetCode每日一題(環(huán)形鏈表 II)

    點擊跳轉(zhuǎn)到題目位置 給定一個鏈表的頭節(jié)點 head ,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。 如果鏈表中有某個節(jié)點,可以通過連續(xù)跟蹤 next 指針再次到達(dá),則鏈表中存在環(huán)。 為了表示給定鏈表中的環(huán),評測系統(tǒng)內(nèi)部使用整數(shù) pos 來表示鏈表尾連接到鏈

    2024年02月15日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包