合并两个排序的数组

问题陈述

给你两个有序整数数组 nums1nums2,请你将 nums2 合并到 nums1 中*,*使 nums1 成为一个有序数组。

说明:

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。

算法实现

可使用双指针比较,由于需要合并到nums1,故需要从尾开始比较,这样不会导致覆盖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int i=m-1,j=n-1,k=m+n-1;
while(i>=0&&j>=0){
if(nums1[i]>nums2[j]){
nums1[k--]=nums1[i];
i--;
}else{
nums1[k--]=nums2[j];
j--;
}
}
while(i>=0){
nums1[k--]=nums1[i--];
}
while(j>=0){
nums1[k--]=nums2[j--];
}

}
}