前言:这是我们大学社团给我们大一新生布置的每日一题任务,因为本人编程理解有限,参考价值较低。
题目链接https://leetcode-cn.com/problems/merge-sorted-array/ 这道题可以用指针的方法去解决,用两个指针遍历一遍,哪个指针指向的数字小哪个指针就+1,然后就能得出新的数组了,是不是非常简单~
下面是AC代码:
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for(int i=m-1;i>=0;i--){
nums1[i+n]=nums1[i]; //这一步我个人觉得挺妙的,节约了空间
}
for(int i=0,p1=n,p2=0;i<m+n;i++){
if(p2==n || p1<m+n && nums1[p1]<nums2[p2]){ //这个逻辑顺序很重要!
nums1[i] = nums1[p1++];
}
else {
nums1[i] = nums2[p2++];
}
}
}
};
这里我标注释的两句话应该是整个代码最难理解的地方,但是我不想解释(逃)