解题思路:
定义三个指针,分别从 nums1 和 nums2 数组的尾部开始向前扫一遍,即可将最终的排序结果存储在nums1中,时间复杂度为 O(m+n)。
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = m - 1; //作为nums1数组的指针
int j = n - 1; //作为nums2数组的指针
int p = m + n - 1; //最终的nums1数组的位置指针
while(j >= 0 && i >= 0){
if(nums2[j] > nums1[i]){
nums1[p--] = nums2[j--];
}
else{
nums1[p--] = nums1[i--];
}
}
while(i >= 0){
nums1[p--] = nums1[i--];
}
while(j >= 0){
nums1[p--] = nums2[j--];
}
}
};