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

题目

%9}L%VT8R5WVDPFUG@TCCPK.png

思路

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

参考文献

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。