题目描述:
方法一:
将nums2数组中的元素移动到数组nums1后面,然后使用C++内置算法sort进行排序
代码实现:
cpp
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int i=m; i<m+n; i++){
nums1[i] = nums2[i-m];
}
sort(nums1.begin(), nums1.end());
}
};
方法二:
使用逆向双指针算法
解题思路:
边界条件:
- 当
p1=-1
时,需要将nums2
剩余的元素移动到nums1
中 - 当
p2=-1
时,由于nums1
与nums2
本就是非递减数列,因此算法结束可以直接返回
代码实现:
cpp
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int p1 = m-1;
int p2 = n-1;
int cur = m+n-1;
while(p1>=0 || p2>=0){
if(p1==-1){
nums1[cur] = nums2[p2];
p2--;
cur--;
}else if(p2==-1){
break;
}else if(nums2[p2] >= nums1[p1]){
nums1[cur] = nums2[p2];
p2--;
cur--;
}else{
nums1[cur] = nums1[p1];
p1--;
cur--;
}
}
}
};