# 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--;
}
}
};
更多解法可参考官网。