項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【Leetcode】C++ – [88] Merge Sorted Array 個人解法筆記 (內含範例程式碼)

題目出處

88. Merge Sorted Array

難度

Easy

題目分類

array, two-pointers

個人範例程式碼

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        while(m > 0 && n > 0){
            if(nums1[m-1] >= nums2[n-1]){
                nums1[m+n-1] = nums1[m-1];
                m -= 1;
            }
            else{
                nums1[m+n-1] = nums2[n-1];
                n -= 1;
            }
        }
        while(n > 0){
            nums1[m+n-1] = nums2[n-1];
            n -= 1;
        }        
    }
};

說明

這題我們可以先注意題目的敘述:
最需要思考的部分在於「題目希望最後的結果直接儲存在 nums1 裡面

雖然這樣的限制會使我們解題更加的「受到限制」,但反過來說,
其實這也是題目給我們「最大的提示」。

題目的 nums1 給的空間為 m+n,所以最後我們都會將所有的值擺入 nums1 中,
而因為我們可以無憂慮去更改的值為最後的 0,0,0… 部分
(因為這個值就算被改消失了,也不影響我們想計算的結果)

所以這邊可以推斷出一定要「從後面開始解」,「從最無痛的 0 開始取代」,

再來我們就可以來思考,什麼時候擺入 nums1的值? 什麼時候擺入 nums2 的值?
我們可以靠著題目所給的 m, n 來進行這樣的操作,透過值不斷擺入,
我們去移動 m, n 作為 index 的座標,即可順利完成此題目。

邊際情況處理

這題要注意的邊際情況為 m=0, n=0 的時候我們要怎麼處理,
而照題目的敘述,

  • n=0 基本上對我們來說沒差,因為 m 控制的 nums1 即代表我們要的答案
  • m=0 才是重點,如果還有剩餘的 n,都需要擺入 nums1 中,而位置索幸很好取得,
    依然可以透過 m+n-1 算出

注意 index 細節,才是這題要考細心的部分

這題有很多 index 細節考驗著作答者的細心度,
包含:

  • 迴圈的範圍僅限於 m, n > 0 時,其他需要進例外處理
  • m-1, n-1 才是當下座標
  • 要擺入的位置為 m+n-1
  • 處理到 n > 0 就應該停下,而非 n >= 0

Reference

⭐ Leetcode 解題紀錄 ⭐題型資料結構Python SolutionC++ SolutionNote
⭐BFS 相關題型 ⭐
104Maximum Depth of Binary TreeBFS (分層)Python
94Binary Tree Inorder TraversalBFS (分層)TreePython 內含 處理 Tree 樹問題的重點
102Binary Tree Level Order TraversalBFS (分層)TreePython
103Binary Tree Zigzag Level Order TraversalBFS (分層)TreePython
107Binary Tree Level Order Traversal IIBFS (分層)TreePython
133Clone GraphBFS (分層)GraphPython Graph 的基本操作 #重要題型
127Word LadderBFS (分層), DFSGraphPython
[Lint] 127Topological SortingBFS (拓撲)Python
內有 indegree, outdegree 介紹 #重要題型
207Course ScheduleBFS (拓樸)GraphPython
210Course Schedule IIBFS (拓樸)GraphPython
[Lint] 892Alien DictionaryBFS (拓樸)GraphPython