2020-06-04 88. 合并两个有序数组

题目

思路

将指针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(inums2[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都必须是同类型或者可以进行转换类型的数组

参考文献

[1]https://leetcode-cn.com/problems/merge-sorted-array/solution/he-bing-liang-ge-you-xu-shu-zu-by-leetcode/

你可能感兴趣的:(2020-06-04 88. 合并两个有序数组)