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.

void merge(int* nums1, int m, int* nums2, int n)
{
    int i = m - 1;
    int j = n - 1;
    int k = m + n - 1;
    
    while(k >= 0)
    {
        /*两个数组均有元素,需要比较*/
        if(i >= 0 && j >= 0)
        {
            if(nums1[i] < nums2[j])
            {
                nums1[k] = nums2[j];
                j--;
            }
            else
            {
                nums1[k] = nums1[i];
                i--;
            }
        }
        /*nums1数组还有剩余元素*/
        else if(i >= 0)
        {
            nums1[k] = nums1[i];
            i--;
        }
        /*nums2数组还有剩余元素*/
        else if (j >= 0)
        {
            nums1[k] = nums2[j];
            j--;
        }
        
        k--;
    }
    
}

经验教训

nums1和nums2都已经是排好序的数组,我们只需要从后往前比较就可以了。
因为nums1有足够的空间容纳m + n,我们使用k指向m + n - 1,也就是最大数值存放的地方,从后往前遍历nums1 nums2,谁大就放到k这里,同时递减k。
88这道或许是整个LeetCode上最简单的题了,前后编写提交不超过5min搞定。
2021.02.19更新

void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    int k = 0;
    for(int i = m -1,j = n - 1;i>=0&&j>=0;)
    {
        if(nums1[i] < nums2[j])
            nums1[m+n-1-k++] = nums2[j--];
        else
            nums1[m+n-1-k++] = nums1[i--];
    }
}

上面的代码在处理如下case时存在问题:

    vector<int> nums1 = {0};
    vector<int> nums2 = {1};
    merge(nums1,0,nums2,1);
    return 0;

正确的形式是使用一个确定的量,比如最终的元素个数必然是m+n个,下标最大m+n-1:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int k = m + n - 1;
        int i = m - 1,j = n - 1;
        while(k >= 0)
        {
            if(i >=0 &&j>=0)
            {
                if(nums1[i] < nums2[j])
                    nums1[k] = nums2[j--];
                else
                    nums1[k] = nums1[i--];
            }
            else if(i >= 0)
                nums1[k] = nums1[i--];
            else if(j >= 0)
                nums1[k] = nums2[j--];
            k--;
        }
    }
};