88. Merge Sorted Array

解法一

思路

直接使用 System.arraycopy() 函数后 sort。

代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        System.arraycopy(nums2, 0, nums1, m, n); // nums2: 要 copy 的数组; 0: 开始 copy 的位置; nums1: copy in 数组; m: copy in 的位置; n: copy 的个数
        Arrays.sort(nums1);
    }
}

时间复杂度 O((n+m)log(m+n)),因为自己进行了一次排序。

解法一

思路

利用 sorted array 这个条件。
在两个数组最后一个有效值处放置指针 (n-1 和 m-1)并且在 nums1 的末尾放置指针 n + m -1
如果两个数组指针都还没到头
把 nums1的末尾和 nums2 的末尾值较大的那个放到数组的末尾。数组末尾指针前移,较大数所在数组指针前移。
如果 nums1 指针到头而 nums2 的还没到头
把剩余的 nums2 元素放进 nums1 中
如果 nums2 到头而 nums1 还没到头
无需进行任何操作因为 nums1 已经排序过了

代码
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int l1 = m - 1;
        int l2 = n - 1;
        int last  = n + m - 1;
        while (l1 >= 0 && l2 >= 0) {
            if (nums1[l1] >= nums2[l2]) {
                nums1[last] = nums1[l1];
                l1--;
            }
            else {
                nums1[last] = nums2[l2];
                l2--;
            }
            last--;
        }

        while (l2 >= 0) {
            nums1[last--] = nums2[l2--];
        }
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!