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

力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組

這篇具有很好參考價值的文章主要介紹了力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組,LeetCode每日一道,leetcode,算法,職場和發(fā)展

?? 江池?。? 個人主頁
??個人專欄: ?數(shù)據(jù)結(jié)構(gòu)探索 ?LeetCode每日一道
?? 有航道的人,再渺小也不會迷途。

LeetCode 88. 合并兩個有序數(shù)組

力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組,LeetCode每日一道,leetcode,算法,職場和發(fā)展

力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組,LeetCode每日一道,leetcode,算法,職場和發(fā)展

思路1:暴力求解

  1. 首先創(chuàng)建一個臨時數(shù)組,其大小為第一個數(shù)組的大?。磏ums1Size),其作用主要是。
  2. 通過循環(huán)遍歷兩個數(shù)組,將兩個數(shù)組元素比較后較小的元素依次加入到臨時數(shù)組中,直到有一個數(shù)組遍歷完即可(注意:這里遍歷完是只有效元素被遍歷完,因為nums1中有無效元素0)。
  3. 將未遍歷完的數(shù)組剩下的元素依次加入到臨時數(shù)組中。
  4. 將臨時數(shù)組中的元素依次拷貝到nums1數(shù)組中。
  5. 釋放臨時數(shù)組的空間。
    力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組,LeetCode每日一道,leetcode,算法,職場和發(fā)展
    時間復(fù)雜度:O(m+n)
    空間復(fù)雜度:O(m+n)

值得注意的是: 這里需要考略到兩種特殊情況需要單獨處理

  • nums2 數(shù)組為空時,nums1 數(shù)組就是兩個數(shù)組排序后的結(jié)果,函數(shù)不需要執(zhí)行任何操作,直接 return 即可
  • nums1 數(shù)組中有效的元素個數(shù)為 0(即 m = 0 ) 時,此時 nums2 數(shù)組中的元素就是兩個數(shù)組排序后的結(jié)果,此時只需要將 nums2 中的數(shù)組元素拷貝到 nums1 數(shù)組即可。
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    if(nums2==NULL)
    {
        return;
    }
    else if(m==0)
    {
        for(int i=0;i<nums1Size;i++)
        {
            nums1[i]=nums2[i];
        }
    }
    //創(chuàng)建一個數(shù)組來臨時存放排序之后的元素,元素個數(shù)為m+n = nums1Size
    int *arr = (int*)malloc((nums1Size)*sizeof(int));
    int index = 0,dest = 0,src = 0;
    //dest和src分別標(biāo)記訪問當(dāng)前數(shù)組元素的下標(biāo)
    //index標(biāo)記臨時數(shù)組加入元素的下標(biāo)位置
    //依次遍歷兩個數(shù)組,直到有一個數(shù)組遍歷完為止
    while(dest < m && src < n)
    {
        if(nums1[dest]<=nums2[src])
        {
            arr[index++] = nums1[dest++];
        }
        else
        {
            arr[index++] = nums2[src++];
        }
    }
    //將未遍歷完的數(shù)組剩下的元素加入到臨時數(shù)組中
    if(src>=n)
    {
        while(dest<m)
        {
            arr[index++] = nums1[dest++];
        }
    }
    else if(dest>=m)
    {
        while(src<n)
        {
            arr[index++] = nums2[src++];
        }
    }
    //將臨時數(shù)組中的元素依次賦值給nums1數(shù)組中對應(yīng)位置的元素
    for(int i = 0;i<nums1Size;i++)
    {
        nums1[i] = arr[i];
    }
    free(arr);//將創(chuàng)建的數(shù)組空間釋放
}

思路2:原地合并

  1. 從后往前遍歷數(shù)組,將 nums1nums2 中的元素逐個比較,將較大的元素往 nums1 末尾進(jìn)行搬移
  2. 第一步結(jié)束后,nums2 中可能會有數(shù)據(jù)沒有搬移完,將 nums2 中剩余的元素逐個搬移到 nums1
  3. 如果 num1 中剩余元素沒有搬移完,就不需要進(jìn)行任何操作,因為 num1 中剩余的元素本來就在 num1
    力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組,LeetCode每日一道,leetcode,算法,職場和發(fā)展
    時間復(fù)雜度:O(m+n)
    空間復(fù)雜度:O(1)
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
    // end1、end2:分別標(biāo)記nums1 和 nums2最后一個有效元素位置
    // end標(biāo)記nums1的末尾,因為nums1和nums2中的元素從后往前往nums1中存放
    // ,否則會存在數(shù)據(jù)覆蓋
    int end1 = m-1;
    int end2 = n-1;
    int index = m+n-1;

    // 從后往前遍歷,將num1或者nums2中較大的元素往num1中end位置搬移
    // 直到將num1或者num2中有效元素全部搬移完
    while(end1 >= 0 && end2 >= 0)
    {
        if(nums1[end1] > nums2[end2])
        {
            nums1[index--] = nums1[end1--];
        }
        else
        {
            nums1[index--] = nums2[end2--];
        }
    }

    // num2中的元素可能沒有搬移完,將剩余的元素繼續(xù)往nums1中搬移
    while(end2 >= 0)
    {
        nums1[index--] = nums2[end2--];
    }
    // num1中剩余元素沒有搬移完 ---不用管了,因為num1中剩余的元素本來就在num1中
}

如果大家有什么疑問可以在評論區(qū)與我討論,或者直接私信我,感謝大家的閱讀哦 ~文章來源地址http://www.zghlxwxcb.cn/news/detail-757081.html

到了這里,關(guān)于力扣每日一道系列 --- LeetCode 88. 合并兩個有序數(shù)組的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • 【Leetcode】88.合并兩個有序數(shù)組

    給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2 ,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意 :最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。為了應(yīng)對這種情況

    2024年02月12日
    瀏覽(25)
  • LeetCode88——合并兩個有序數(shù)組

    LeetCode88——合并兩個有序數(shù)組

    給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。 為了應(yīng)對這種情況

    2024年02月08日
    瀏覽(26)
  • Leetcode. 88合并兩個有序數(shù)組

    Leetcode. 88合并兩個有序數(shù)組

    合并兩個有序數(shù)組 核心思路: 依次比較,取較小值放入新數(shù)組中 i 遍歷nums1 , j 遍歷nums2 ,取較小值放入nums3中 那如果nums[i] 和nums[j]中相等,隨便放一個到nums3 那如果nums[i] 和nums[j]中相等,隨便放一個到nums3 此時 nums1 中的元素已經(jīng)走完了,那么直接把 nums2 中剩下的元素拿到

    2023年04月08日
    瀏覽(24)
  • LeetCode_88. 合并兩個有序數(shù)組

    目錄 題目描述 思路分析 我的題解 給你兩個按 非遞減順序 排列的整數(shù)數(shù)組?nums1 和 nums2,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲

    2023年04月15日
    瀏覽(21)
  • ?LeetCode解法匯總88. 合并兩個有序數(shù)組

    https://github.com/September26/java-algorithms 給你兩個按? 非遞減順序 ?排列的整數(shù)數(shù)組? nums1 ? 和? nums2 ,另有兩個整數(shù)? m ?和? n ?,分別表示? nums1 ?和? nums2 ?中的元素數(shù)目。 請你? 合并 ? nums2 ? 到? nums1 ?中,使合并后的數(shù)組同樣按? 非遞減順序 ?排列。 注意: 最終,合并

    2024年02月12日
    瀏覽(29)
  • 88. 合并兩個有序數(shù)組、Leetcode的Python實現(xiàn)

    博客主頁:??李歘歘的博客 ?? ??每天不定期分享一些包括但不限于計算機(jī)基礎(chǔ)、算法、后端開發(fā)相關(guān)的知識點,以及職場小菜雞的生活。?? ??點關(guān)注不迷路,總有一些??知識點??是你想要的?? ??今天的內(nèi)容是 ? ? Leetcode? 88. 合并兩個有序數(shù)組? ?? ? ?????????

    2024年02月06日
    瀏覽(23)
  • LeetCode-Java:88合并兩個有序數(shù)組

    給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2 ,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意:最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。為了應(yīng)對這種情況

    2024年02月05日
    瀏覽(29)
  • 算法leetcode|88. 合并兩個有序數(shù)組(rust重拳出擊)

    給你兩個按 非遞減順序 排列的整數(shù)數(shù)組 nums1 和 nums2 ,另有兩個整數(shù) m 和 n ,分別表示 nums1 和 nums2 中的元素數(shù)目。 請你 合并 nums2 到 nums1 中,使合并后的數(shù)組同樣按 非遞減順序 排列。 注意 :最終,合并后數(shù)組不應(yīng)由函數(shù)返回,而是存儲在數(shù)組 nums1 中。為了應(yīng)對這種情況

    2024年02月05日
    瀏覽(21)
  • “三指針法“合并兩個有序數(shù)組(力扣每日一練)

    “三指針法“合并兩個有序數(shù)組(力扣每日一練)

    ? ? ? ? 我的第一想法確實是:先合并數(shù)組,再排序,搞完。 ? ? ? ? 哈哈哈,想那么多干嘛,目的達(dá)成了就好了。 力扣官方題解是雙指針: 還有糕手: Python: C#: ? ? ? 總結(jié) ? ? ? ? 可以稱之為\\\"三指針\\\" 方法,因為我們同時使用了三個指針(p1、p2 和 p)來操作和遍歷兩

    2024年02月02日
    瀏覽(22)
  • 【力扣每日一題】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)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包