Loading

Leetcode-88-合并两个有序数组

题目链接


题目描述

如题目
合并后的数组在 nums1 中,nums1初始长度为(m+n).

思路

  1. 双指针,分别指向nums1和nums2的开头

  2. 小的数记录进新数组ans, 对应的指针++.

  3. 其中一个指针到头后,把另一个数组剩余的数放新数组后边

(注意:a[i] = b[i++]的运算顺序......)


C++代码

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        vector<int> t(m+n);
        int p1=0, p2=0;
        while (p1<m || p2<n)
        {
            if (p1 == m)
                t[p1+p2-1] = nums2[p2++];
            else if(p2 == n)
                t[p1+p2-1] = nums1[p1++];
            else if (nums1[p1] < nums2[p2])
                t[p1+p2-1] = nums1[p1++];
            else 
                t[p1+p2-1] = nums2[p2++];
        }
        for (int i = 0; i < n+m; i++)
            nums1[i] = t[i];
    }
};
posted @ 2022-01-18 16:41  ARUI丶  阅读(20)  评论(0编辑  收藏  举报