双指针与滑动窗口简单1 种解法
#88合并两个有序数组
把 nums2 合并进预留了尾部空间的 nums1,使 nums1 整体非递减。
#数组#双指针#排序
解题主线
01
从尾部写入可直接覆盖空位,不会破坏 nums1 中尚未比较的有效元素。
解法 1:逆向双指针
比较两个有效区间的末尾,把较大值写到 nums1 的末尾空位。
时间复杂度
O(m + n)
空间复杂度
O(1)
java
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