双指针与滑动窗口简单1 种解法

#88合并两个有序数组

把 nums2 合并进预留了尾部空间的 nums1,使 nums1 整体非递减。

#数组#双指针#排序

解题主线

01

从尾部写入可直接覆盖空位,不会破坏 nums1 中尚未比较的有效元素。

解法 1逆向双指针

比较两个有效区间的末尾,把较大值写到 nums1 的末尾空位。

时间复杂度

O(m + n)

空间复杂度

O(1)

88. 合并两个有序数组 · 逆向双指针
final class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int first = m - 1;
        int second = n - 1;
        int write = m + n - 1;
        while (second >= 0) {
            if (first >= 0 && nums1[first] > nums2[second]) {
                nums1[write--] = nums1[first--];
            } else {
                nums1[write--] = nums2[second--];
            }
        }
    }
}

比较两个有效区间的末尾,把较大值写到 nums1 的末尾空位。

边界与易错点

  • 只需在 nums2 尚有元素时继续;nums1 剩余前缀已经位于正确位置。
  • 写指针应从 m + n - 1 开始,而不是依赖物理数组长度的额外假设。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

easy/Q088_mergeTwoSortedArr.java