---
# System prepended metadata

title: merge sorted array
tags: [JavaScript, Array/String]

---

# merge sorted array
###### tags: `array`
 


範例：
輸入：
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
輸出：
[1,2,2,3,5,6]



```c++=
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        //兩個vector都已經排序過
        //比較兩個vector的值然後插入
        //因為nums1有空格了從後面開始放會更好
        int i = m - 1;  //nums1的尾端
        int j = n - 1;  //nums2的尾端
        int k = m + n -1;   //合併後的尾端
        if(nums2.empty()){
            return ;
        }
        if(nums1.empty()){
            for(int k = 0; k < nums2.size(); k++){
                nums1.push_back(nums2[k]);             
            }
        }

        while(i >= 0 && j >= 0){
            if(nums1[i] >= nums2[j]){   
                nums1[k] = nums1[i];    //升序
                k--;
                i--;
            }else{
                nums1[k] = nums2[j];
                k--;
                j--;
            }
        }
        //如果nums2還有沒被放到的元素代表剩下的都小於nums1了 所以按照順序放入 因為是已經排序好的
        while(j >= 0){
            nums1[k] = nums2[j];
            k--;
            j--;
        }
    }
};
```

```=
/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    // 從尾端開始放
    let rear = m + n - 1;
    let i = m - 1;
    let j = n - 1;
    while(i >= 0 && j >= 0){
        if(i >= 0 && j >= 0 && nums1[i] > nums2[j]){
            nums1[rear] = nums1[i];
            i--;
            rear--;
        }else{
            nums1[rear] = nums2[j];
            j--;
            rear--;
        }
    }

    while(i >= 0){
        nums1[rear] = nums1[i];
        i--;
        rear--;
    }
    while(j >= 0){
        nums1[rear] = nums2[j];
        j--;
        rear--;
    }

    return nums1;
};

```