88. 合并两个有序数组
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int I1 = m - 1;
int I2 = n - 1;
// MergeIdx initially points at the back of nums1. This will let us perform
// an in-place merge.
int MergeIdx = m + n - 1;
// The remaining part is basically like merging a list.
while (I1 >= 0 && I2 >= 0) {
if (nums1[I1] > nums2[I2]) {
nums1[MergeIdx] = nums1[I1];
--I1;
} else {
nums1[MergeIdx] = nums2[I2];
--I2;
}
--MergeIdx;
}
while (I1 >= 0)
nums1[MergeIdx--] = nums1[I1--];
while (I2 >= 0)
nums1[MergeIdx--] = nums2[I2--];
}
};
这个题的找大数逆序合并的思路非常精妙。不过除此之外似乎也就没什么可说的了,因为后面的思路——甚至于代码——跟合并有序链表都没什么差别。