LeetCode88——Merge Sorted Array
合并两有序数组…
原题
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
题目很简单就是合并两有序数组,但是注意到数组的大小由m,n给定而不是通过nums1.size()
来求即可。
想到将两有序链表合并为一个有序链表的做法,最后需要将两数组中剩余的元素加入到结果数组中。
代码
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int i = 0;
int j = 0;
vector<int>result;
vector<int>n1(nums1.begin(), nums1.begin() + m);
vector<int>n2(nums2.begin(), nums2.begin() + n);
while (i < n1.size() && j < n2.size())
{
if (n1[i] < n2[j])
{
result.push_back(n1[i]);
++i;
}
else if (n1[i] > n2[j])
{
result.push_back(n2[j]);
++j;
}
else
{
result.push_back(n1[i]);
result.push_back(n2[j]);
++i;
++j;
}
}
if (i >= n1.size())
{
for (; j < n2.size(); j++)
{
result.push_back(n2[j]);
}
}
if (j>=n2.size())
{
for (; i < n1.size(); i++)
{
result.push_back(n1[i]);
}
}
nums1.clear();
auto it = result.begin();
for (int k = 0; k < m + n; k++)
{
nums1.push_back(*it);
it++;
}
}
};