写出合并两个有序数组的代码
时间: 2023-09-10 21:06:19 浏览: 159
可以参考如下的Python代码实现:
```python
def merge_sorted_array(nums1, m, nums2, n):
i, j, k = m-1, n-1, m+n-1
while i >= 0 and j >= 0:
if nums1[i] >= nums2[j]:
nums1[k] = nums1[i]
i -= 1
else:
nums1[k] = nums2[j]
j -= 1
k -= 1
while j >= 0:
nums1[k] = nums2[j]
k -= 1
j -= 1
```
其中,nums1和nums2分别为两个已经有序的数组,m和n分别是它们的长度,函数的作用是将两个数组合并成一个有序数组nums1。这个函数的基本思路是借助三个指针i、j和k,分别指向nums1、nums2和合并后的数组nums1,然后从后往前遍历两个数组,比较它们的末尾元素大小,将较大的元素放到nums1的最后,直到其中一个数组遍历完毕,然后再将另一个数组的元素全部复制到nums1中。这样就能得到合并后的有序数组了。
相关问题
用C++,写出对应代码:已有两个数组a1和a2, 其中数组a1长度为M+N, 前M个数值有效且有序;数组a2长度为N,有序。如何不开辟新的空间合并a1, a2成为一个有序数组
你可以使用双指针技巧来合并这两个有序数组,不需要开辟新空间。下面是C++代码的一个示例:
```cpp
#include <iostream>
void mergeArrays(int a1[], int a2[], int m, int n) {
// 初始化指针
int i = 0; // a1 的指针
int j = 0; // a2 的指针
int k = 0; // 结果数组的指针
while (i < m && j < n) { // 当两个数组还有剩余元素
if (a1[i] <= a2[j]) { // 如果a1当前元素较小
a1[k++] = a1[i++]; // 将a1的元素放入结果并移动指针
} else {
a1[k++] = a2[j++]; // 否则将a2的元素放入结果并移动指针
}
}
// 把剩下的元素(如果有的话)添加到结果数组
while (i < m) {
a1[k++] = a1[i++];
}
while (j < n) {
a1[k++] = a2[j++];
}
}
int main() {
int M = 5;
int N = 4;
int a1[M + N] = {1, 3, 5, 7, 9, 0, 0, 0, 0, 0}; // 假设前M个值已排序
int a2[N] = {2, 4, 6, 8};
mergeArrays(a1, a2, M, N);
for (int i = 0; i < M + N; ++i) {
std::cout << a1[i] << " ";
}
return 0;
}
```
当你运行这个程序,你会看到合并后的有序数组 `1 2 3 4 5 6 7 8 9`。
用JAVA写一段代码,合并有序数组并去重
在Java中,合并两个有序数组并去重可以通过双指针技术实现。以下是一个示例代码,它使用了两个指针分别遍历两个有序数组,并将它们合并到一个新数组中,同时去除重复元素。
```java
public class MergeSortedArray {
public static int[] mergeAndRemoveDuplicates(int[] nums1, int[] nums2) {
if (nums1 == null || nums1.length == 0) {
return nums2;
}
if (nums2 == null || nums2.length == 0) {
return nums1;
}
int i = 0, j = 0;
int[] merged = new int[nums1.length + nums2.length];
while (i < nums1.length && j < nums2.length) {
if (nums1[i] < nums2[j]) {
merged[i + j] = nums1[i];
i++;
} else if (nums1[i] > nums2[j]) {
merged[i + j] = nums2[j];
j++;
} else {
merged[i + j] = nums1[i];
i++;
j++;
}
}
while (i < nums1.length) {
merged[i + j] = nums1[i];
i++;
}
while (j < nums2.length) {
merged[i + j] = nums2[j];
j++;
}
return merged;
}
public static void main(String[] args) {
int[] nums1 = {1, 2, 3, 4, 5};
int[] nums2 = {3, 4, 5, 6, 7};
int[] mergedArray = mergeAndRemoveDuplicates(nums1, nums2);
for (int num : mergedArray) {
System.out.print(num + " ");
}
}
}
```
这段代码首先定义了一个`mergeAndRemoveDuplicates`方法,它接收两个整型数组`nums1`和`nums2`作为参数,然后通过比较两个数组的元素来合并它们,并在合并的同时去除重复的元素。最后,`main`方法中创建了两个示例数组并调用了`mergeAndRemoveDuplicates`方法,打印出合并去重后的结果。
阅读全文