又来到一天一度的leetcode刷题时间,在像往常一样打开leetcode题库时,突然看到了双指针这个主题的题库,心里一想,想起了这不是前天博主刚刚写的一篇双指针的总结方法文章。这不拿几道题来练练手,于是博主就点击了这个双指针这三个字。随之出现的就是很多很多题目。故在这里博主特地挑选了一道经典题目来进行分享。
1.题目:
解题方法:这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)//注意num是数组,在做函数参数时需要加上&。
{
int p1 = 0, p2 = 0;//为两个数组分别设置一个指针p1 与p2 来作为队列的头部指针。
int sorted[m + n];//定义一个整合后的数组sorted
int cur;
while (p1 < m || p2 < n)
{
if (p1 == m)
{
cur = nums2[p2++];//当p1指向数组num1最后一个元素时,变化的却是num2,因为此时再p1再加一已经没有意义了。
}
else if (p2 == n)
{
cur = nums1[p1++];//当p2指向数组num2最后一个元素时,变化的却是num1,因为此时再p2再加一已经没有意义了。
}
else if (nums1[p1] < nums2[p2])//第一个数组的数据小于第二个数组的数据
{
cur = nums1[p1++];//提取num1数组的p1个数据赋值给cur,p1再加一
}
else
{
cur = nums2[p2++];
}
sorted[p1 + p2 - 1] = cur;//提取的cur赋值给这个整合数据的相应下标位置
}
for (int i = 0; i != m + n; ++i)
{
nums1[i] = sorted[i];//整个数组的各个数据都拷贝到num1中
}
}
};
本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.