题目
思路
- 双指针i,j 依次把两个数组中nums1[i]与nums2[j]小的放入到另一个排序数组中
- 若nums1与nums2最后有元素未被遍历到,则直接插入
8.30更 参考官网题解 逆向双指针
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1=m-1, p2=n-1, pos=m+n-1, cur;
while(p1>=0||p2>=0){
if(p1==-1) cur=nums2[p2--];
else if(p2==-1) cur=nums1[p1--];
else if(nums1[p1]>nums2[p2]) cur=nums1[p1--];
else cur=nums2[p2--];
nums1[pos--]=cur;
}
}
}
C++代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i=0,j=0,pos=0;
vector<int> nums3=nums1;
while(i<m&&j<n){
if(nums3[i]<=nums2[j]){
nums1[pos]=nums3[i];
i++;
}
else{
nums1[pos]=nums2[j];
j++;
}
pos++;
}
while(i<m){
if(nums3[i]==0) break;
nums1[pos]=nums3[i];
i++;
pos++;
}
while(j<n){
nums1[pos]=nums2[j];
pos++;
j++;
}
}
};