合并两个有序数组
倒叙解法
代码如下:
class Solution {public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int m_ = m - 1;
int n_ = n - 1;
int len = m + n - 1;
while (m_ >= 0 && n_ >= 0)
nums1[len--] = nums1[m_] > nums2[n_] ? nums1[m_--] : nums2[n_--];
while (n_ >= 0)
nums1[len--] = nums2[n_--]; }
};
这个方法巧妙的回避了如何确定最终数组长度的问题,通过反向计数的方式解决了问题相对于正向思维的解法更加节省空间和时间。