# 88. 合并两个有序数组

给你两个按非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。

# 解题思路

对于 3 个有序数组,各自的最大值都在末尾,所以只需要循环取末尾的最大值放到目标数组中 nums1 中即可。

每次选中其中一方时就把对应的索引往前移,后者的数量可能大于前者,所以需要在结尾处单独循环一次确认后者的数值处理完成。

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        if (n == 0) return;

        int i = m + n;
        m--;
        n--;

        for (i--; i >= 0; i--) {
            if (m >= 0 && n >= 0) {
                int left = nums1[m];
                int right = nums2[n];

                if (left >= right) {
                    nums1[i] = left;
                    m--;
                } else {
                    nums1[i] = right;
                    n--;
                }
            } else {
                break;
            }
        }

        while(n >= 0) {
            nums1[i] = nums2[n];
            i--;
            n--;
        }
    }
};

更多解法可参考官网。

# 参考