codeTop100题(20)88. 合并两个有序数组

54 阅读1分钟

1. 题目

88. 合并两个有序数组

2. 分析

这类合并有序数组的题目,我们可以通过双指针的方式进行解决,类似

合并有序链表

但是题目中的一个数组已经预留了足够的空间给处理后的数组了,我们怎么保证最小的空间复杂度呢?

即:两个指针从大到小开始遍历。将大的数字往数组a的最后面开始放。

3. 代码

public void merge(int[] nums1, int m, int[] nums2, int n) {
    int t = m + n - 1;
    m = m - 1;
    n = n - 1;
    while (t >= 0) {
        if (n < 0) {
            break;
        }
        if (m < 0) {
            nums1[t--] = nums2[n--];
            continue;
        }
        if (nums1[m] > nums2[n]) {
            nums1[t--] = nums1[m--];
        } else {
            nums1[t--] = nums2[n--];
        }
    }
}