给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
示例 1:
| 12
 3
 4
 
 | 输入:nums1 = , m = 3, nums2 = , n = 3输出:
 解释:需要合并  和  。
 合并结果是  ,其中斜体加粗标注的为 nums1 中的元素。
 
 | 
示例 2:
| 12
 3
 4
 
 | 输入:nums1 = , m = 1, nums2 = , n = 0输出:
 解释:需要合并  和  。
 合并结果是  。
 
 | 
示例 3:
| 12
 3
 4
 5
 
 | 输入:nums1 = , m = 0, nums2 = , n = 1输出:
 解释:需要合并的数组是  和  。
 合并结果是  。
 注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。
 
 | 
提示:
- nums1.length == m + n
- nums2.length == n
- 0 <= m, n <= 200
- 1 <= m + n <= 200
- -109 <= nums1[i], nums2[j] <= 109
归并排序
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 | class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {
 int[] temp = new int[m];
 for(int i = 0; i < m; i++){
 temp[i] = nums1[i];
 }
 int i = 0, j = 0, k = 0;
 while(i < m && j < n){
 if(temp[i] <= nums2[j]){
 nums1[k++] = temp[i++];
 }else{
 nums1[k++] = nums2[j++];
 }
 }
 
 while(i < m) nums1[k++] = temp[i++];
 while(j < n) nums1[k++] = nums2[j++];
 }
 }
 
 | 
时间复杂度:$O(m+n)$