题目

题解
我的错误,使用从往后的双指针思想,必会导致前面的指针被覆盖,出现错误
正确的思路是,根据nums1的后面数全为0的特性,进行从后向前的遍历
class Solution {public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int p1 = m - 1, p2 = n - 1;int tail = m + n - 1;int cur;while (p1 >= 0 || p2 >= 0) { //只要有一个还没遍历完,就不能停止if (p1 == -1) {cur = nums2[p2--];} else if (p2 == -1) {cur = nums1[p1--];} else if (nums1[p1] > nums2[p2]) {cur = nums1[p1--];} else {cur = nums2[p2--];}nums1[tail--] = cur;}}};
