一、题目描述:88. 合并两个有序数组(中等)
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、解题思路
1、双指针加一个index游标
2、从右到左,指针一的值大于等于指针二的值就赋值给index,同时index和指针一 减一。指针二的值大于等于指针一的值就复制给index,同时指针二和index减一。
3、如果上面步奏的循环结束后,指针二仍然没有小于0。执行循环指针二的值赋值给index,同时指针二和index减一。直到指针二小于0
三、代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
//cout<<nums1.size()<<endl;
//cout<<nums2.size()<<endl;
int right = nums1.size()-1;
m--;
n--;
while(m>=0 && n>=0)
{
while(n>=0&& right >=m &&nums1[m]<=nums2[n])
{
nums1[right] = nums2[n];
n--;
right--;
}
while(m>=0&& right >m &&nums1[m]>=nums2[n])
{
nums1[right] = nums1[m];
m--;
right--;
}
}
while(n>=0 && right >=0)
{
nums1[right] = nums2[n];
n--;
right--;
}
}
};