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--];
  }
};

这个题的找大数逆序合并的思路非常精妙。不过除此之外似乎也就没什么可说的了,因为后面的思路——甚至于代码——跟合并有序链表都没什么差别。