Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
- The number of elements initialized in nums1 and nums2 are m and n respectively.
- You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
Example:
Input: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6]
题目中已经提示,使用归并排序即可。由于该题目要求为O(1)的空间复杂度,所以不能新开数组,使用反向归并排序,从最大的元素开始比较即可,这是一个另类的思路;
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int a=m-1;
int b=n-1;
int c=n+m-1;
while(a>=0&&b>=0){
if(nums1[a]<nums2[b]){
nums1[c--]=nums2[b--];
}else{
nums1[c--]=nums1[a--];
}
//cout<<nums1[c+1];
}
while(b>=0){
nums1[c--]=nums2[b--];
}
}
};