LeetCode—88. Merge Sorted Array
题目
- 将两个有序数组合并,使得合并后的数组仍然有序。其中,数组1后面已补零使得其的长度大于等于两个数组的总长度。
思路及分析
88题。这道题用插入排序可以解决,但是时间复杂度是 .这里不用插入排序的方法。我们每次同时从后往前取两个数组的一个元素,将较大的放在数组1的最后,注意这里最后应该是m+n-1而不是m-1。所以这里需要三个指针分别指向三个末尾位置。另外,最后当一个数组元素全部拍完后,另一个数组可能还有剩余,如果是数组1剩余,我们不用管他,如果是数组2剩余,我们需要将这些元素在暗许放入 。
代码
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int totalLen = m+n-1;
int i = m-1;
int j = n-1;
while(i>=0 && j>=0){
if(nums1[i]>nums2[j]){
nums1[totalLen--] = nums1[i--];
}else{
nums1[totalLen--] = nums2[j--];
}
}
while(j>=0){
nums1[totalLen--] = nums2[j--];
}
}
}