# 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;
};
```