首頁 > web前端 > js教程 > LeetCode 挑戰:合併排序數組 - JavaScript 解決方案

LeetCode 挑戰:合併排序數組 - JavaScript 解決方案

Susan Sarandon
發布: 2024-12-17 18:01:10
原創
331 人瀏覽過

LeetCode Challenge:  Merge Sorted Array - JavaScript Solution

頂尖訪談150

合併排序數組是一個經典問題,了解如何有效解決它對於編碼面試至關重要。在這篇文章中,我們將使用 JavaScript 來解決 LeetCode 的 88. 合併排序數組,這是頂級面試 150 個問題挑戰的一部分。讓我們深入研究這個問題、它的細微差別以及一個乾淨、最佳的解決方案!


?問題描述
給定兩個整數數組 nums1 和 nums2,按非降序排序。您的任務是將 nums2 合併到 nums1 中,使 nums1 保持排序狀態。

但是,有一個轉捩點:

nums1 有足夠的空間(設定為 0s)來容納 nums2 的元素。
最終的合併結果必須就地儲存在 nums1 中。


?範例

範例1

Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
登入後複製

範例2

Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
登入後複製

範例3

Input: nums1 = [0], m = 0, nums2 = [1], n = 1
Output: [1]
登入後複製

?主要見解

  • 就地合併:需要填滿nums1而不使用額外的空間。這意味著直接修改數組。
  • 從後到前的策略:由於nums1末尾有多餘的空間,最有效的方法是從後面填充。

? JavaScript 解決方案:兩指標方法

最佳解法利用雙指標方法,從兩個陣列的末端開始。這確保了最大的元素首先放置,避免不必要的元素移動。

var merge = function(nums1, m, nums2, n) {
    // Initialize pointers for nums1, nums2, and the last index of nums1
    let p1 = m - 1;
    let p2 = n - 1;
    let p = m + n - 1;

    // Compare elements from the end and place the largest at the back
    while (p1 >= 0 && p2 >= 0) {
        if (nums1[p1] > nums2[p2]) {
            nums1[p] = nums1[p1];
            p1--;
        } else {
            nums1[p] = nums2[p2];
            p2--;
        }
        p--;
    }

    // Copy remaining elements from nums2 (if any)
    while (p2 >= 0) {
        nums1[p] = nums2[p2];
        p2--;
        p--;
    }
};

登入後複製

?工作原理

  1. 從末尾開始:
    比較 nums1 和 nums2 的最大元素(使用 p1
    和 p2 指標)。將較大的元素放在
    的末尾 nums1(使用 p 指標)。

  2. 遞減指針:
    在處理元素時移動 p1、p2 和 p。

  3. 處理剩餘元素:
    如果 nums2 中還有剩餘元素,則複製到 nums1 中。 (沒有
    需要從 nums1 複製元素,因為它們已經就位。 )


?複雜度分析

?試運行
輸入:
nums1 = [1,2,3,0,0,0],m = 3,nums2 = [2,5,6],n = 3

步驟 p1 p2 p nums1
初始化 2 2 5 [1,2,3,0,0,0]
1 2 2 5 [1,2,3,0,0,6]
2 2 1 4 [1,2,3,0,5,6]
3 2 0 3 [1,2,3,3,5,6]
4 1 0 2 [1,2,2,3,5,6]
5 0 0 1 [1,2,2,3,5,6]
最終輸出:[1,2,2,3,5,6]


?自己嘗試吧!

查看 LeetCode 上的完整問題和測試案例。挑戰自己,在不看程式碼的情況下實現解決方案!


✨ 面試專業技巧

  1. 澄清限制:詢問您是否可以使用額外的空間,或者如果- 地點為必填項。
  2. 針對邊緣情況進行最佳化:考慮 nums2 為空的情況 或 nums1 沒有初始元素 (m = 0)。
  3. 演練你的邏輯:解釋兩指標方法 向面試官說清楚。


有任何問題或見解嗎?在下面的評論中分享吧!我們一起來學習吧。 ?

以上是LeetCode 挑戰:合併排序數組 - JavaScript 解決方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板