题目描述
给你两个有序整数数组 nums1
和 nums2
,请你将 nums2
合并到 nums1
中,使 nums1
成为一个有序数组。
说明:
- 初始化
nums1
和nums2
的元素数量分别为m
和n
。 - 你可以假设
nums1
有足够的空间(空间大小大于或等于m + n
)来保存nums2
中的元素。
样例
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
算法分析
从大到小存放元素,假设nums1[i]
是当前nums1
数组中的最大的元素,nums2[j]
是当前nums2
数组中的最大的元素,初始化k = m + n - 1
,比较nums1[i]
和nums2[j]
,将大的放在k
的位置,同时i
或者j
和 k
同时减1
时间复杂度 $O(n)$
Java 代码
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int k = m + n - 1;
int i = m - 1,j = n - 1;
while(i >= 0 && j >= 0)
{
if(nums1[i] >= nums2[j]) nums1[k --] = nums1[i --];
else nums1[k --] = nums2[j --];
}
while(j >= 0) nums1[k --] = nums2[j --];
}
}