问题描述:
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
The number of elements initialized in nums1 and nums2 are m and n respectively. You may assume that nums1 has a size equal to m + n such that it has enough space to hold additional elements from nums2.
分析:即mergesort中merge的部分,以前学过,写写就当练手了。
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//copy the first m elements out from nums1 to temp;
int[] temp = new int[m];
for(int i=0; i<m; i++){
temp[i] = nums1[i];
}
//initialize the pointers
int left_p = 0;
int right_p = 0;
int k=0;
while ((left_p<m) && (right_p<n)){
if (temp[left_p]<=nums2[right_p]){
nums1[k]=temp[left_p];
left_p++;
k++;
}
else{
nums1[k]=nums2[right_p];
right_p++;
k++;
}
}
for (;k<m+n;k++){
if (left_p<m){
nums1[k]=temp[left_p];
left_p++;
}
else{
nums1[k]=nums2[right_p];
right_p++;
}
}
}
}
时间复杂度:O(m+n)