### 合并两个升序数组的解决方案
以下是通过 Python 和 Java 实现将两个升序数组合并为一个新的升序数组的具体方法。
#### 方法概述
为了高效地完成这一任务,可以采用双指针法。这种方法利用了两个数组已经排序的特点,从头到尾依次比较两数组中的元素,并按顺序放入新的目标数组中。此过程的时间复杂度为 O(m+n),其中 m 和 n 是两个数组的长度[^4]。
---
#### Python 实现代码
下面是一个基于 Python 的实现:
```python
def merge_sorted_arrays(nums1, nums2):
merged = []
i, j = 0, 0
# 双指针遍历两个数组
while i < len(nums1) and j < len(nums2):
if nums1[i] <= nums2[j]:
merged.append(nums1[i])
i += 1
else:
merged.append(nums2[j])
j += 1
# 如果其中一个数组还有剩余元素,则直接追加到结果列表后面
while i < len(nums1):
merged.append(nums1[i])
i += 1
while j < len(nums2):
merged.append(nums2[j])
j += 1
return merged
# 测试用例
nums1 = [1, 3, 11, 20, 22]
nums2 = [55, 444, 555, 800, 9999, 10000, 22222]
result = merge_sorted_arrays(nums1, nums2)
print(result) # 输出应为:[1, 3, 11, 20, 22, 55, 444, 555, 800, 9999, 10000, 22222]
```
上述代码展示了如何使用双指针技术来逐步构建一个新数组 `merged`,该数组包含了来自 `nums1` 和 `nums2` 中的所有元素,并保持其升序排列。
---
#### Java 实现代码
下面是基于 Java 的实现方式:
```java
public class MergeSortedArrays {
public static int[] merge(int[] nums1, int m, int[] nums2, int n) {
int[] result = new int[m + n];
int i = 0, j = 0, k = 0;
// 使用双指针分别指向两个数组的起始位置
while (i < m && j < n) {
if (nums1[i] <= nums2[j]) {
result[k++] = nums1[i++];
} else {
result[k++] = nums2[j++];
}
}
// 将剩余部分复制到结果数组中
while (i < m) {
result[k++] = nums1[i++];
}
while (j < n) {
result[k++] = nums2[j++];
}
return result;
}
public static void main(String[] args) {
int[] nums1 = {1, 3, 11, 20, 22};
int m = nums1.length;
int[] nums2 = {55, 444, 555, 800, 9999, 10000, 22222};
int n = nums2.length;
int[] mergedArray = merge(nums1, m, nums2, n);
System.out.println(Arrays.toString(mergedArray));
// 输出应为:[1, 3, 11, 20, 22, 55, 444, 555, 800, 9999, 10000, 22222]
}
}
```
这段代码实现了类似的逻辑,在处理过程中创建了一个额外的结果数组用于存储合并后的数据[^3]。
---
#### 结果验证
对于给定的例子 `[1, 3, 11, 20, 22]` 和 `[55, 444, 555, 800, 9999, 10000, 22222]`,最终得到的合并数组应该是:
\[ [1, 3, 11, 20, 22, 55, 444, 555, 800, 9999, 10000, 22222] \][^5]。
---