题目
思路
将指针p1置为nums1的开头,p2为nums2的开头,在每一步将最小值放入输出数组中。由于 nums1 是用于输出的数组,需要将nums1中的前m个元素放在其他地方,也就需要O(m)的空间复杂度。
代码
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int [] nums1_copy = new int[m];
System.arraycopy(nums1, 0, nums1_copy, 0, m);
int i = 0, j = 0 , k = 0;
while(i<m&&j<n){
nums1[k++] = nums1_copy[i]>nums2[j]?nums2[j++]:nums1_copy[i++];
}
if(i < m){
System.arraycopy(nums1_copy, i, nums1, k, m-i);
}
if(j < n){
System.arraycopy(nums2,j,nums1,k,n-j);
}
}
}
- 注:System.arraycopy的函数原型为:
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
src:源数组;
srcPos:源数组要复制的起始位置;
dest:目的数组;
destPos:目的数组放置的起始位置;
length:复制的长度。
注意:src and dest都必须是同类型或者可以进行转换类型的数组