这道题应该是给你两个有序链表,让你合成一个有序链表的变种。和链表不一样的是,数组中的元素是顺序排列的,如果按照链表的方式处理,可能会出现新值覆盖掉旧值的情况。
所以就会有两种解决方案,第一种是将nums1里的元素复制到新的数组中,然后按照链表的方式处理,空间复杂度为O(m),时间复杂度为O(m+n)。
第二种是从后向前进行遍历,将两个数组中相对大的元素放入nums1的对应位置,空间复杂度是O(1),时间复杂度是O(m+n)。
class Solution
{
public:
void merge(vector<int> &nums1, int m, vector<int> &nums2, int n)
{
int i = m - 1, j = n - 1, cur = m + n - 1;
while (i >= 0 && j >= 0)
{
if (nums1[i] >= nums2[j])
nums1[cur--] = nums1[i--];
else
nums1[cur--] = nums2[j--];
}
while (i >= 0)
nums1[cur--] = nums1[i--];
while (j >= 0)
nums1[cur--] = nums2[j--];
}
};